2014-10-17 77 views
0
<!DOCTYPE html> 
<html lang="en"> 
    <head> 
     <meta charset="utf-8"> 
     <title>Title</title> 
     <script language="JavaScript"> 
     <!-- 
     function showtags() 
     { 
      var tag, tags; 
      //document.write(document.all.length); 
      tags = "The tags in the page are:" 
      for(i = 0; i < document.all.length; i++) 
      { 
       tag = document.all(i).tagName; 
       tags = tags + "<br>" + tag; 
      } 
      document.write(tags); 
     } 
     // --> 
     </script>  
    </head> 
    <body onload="showtags()"> 
     <h1>My <b>Web</b> Page</h1> 
    </body> 
</html> 

輸出:文件撰寫奇怪的行爲

頁面中的標籤是:
HTML
HEAD
META
TITLE
SCRIPT
BODY
H1

通過取消註釋第一個document.write()的我得到以下輸出:

頁面。第八

標籤:
HTML
HEAD
BODY

有些標籤丟失,我不明白錯誤在哪裏!我提前謝謝你。

+1

函數中的'document.write'不好。它應該只在函數外部使用,而dom仍在被解析。否則,現有文檔將替換爲您傳遞給document.write的內容。 – 2014-10-17 04:30:56

+0

您評論過的註釋過的'document.write()'在哪裏? – Barmar 2014-10-17 04:39:32

+0

@Barmar最初發布帖子時,「document.write(document.all.length)」最初被註釋掉了。 – jprofitt 2014-10-17 04:41:24

回答

1

這是因爲document.write在文件加載完成後被調用,它將擦除並替換當前文件。如果你看到這裏:onload="showtags()"這就是它發生的原因。需要在DOM完成加載之前調用document.write。例如:

<p> <script> document.write("hi"); </script> </p> 

沒問題,因爲DOM仍在加載。但是在onload中,或者頁面完成加載後,通常不是。

+1

已解決。按照Spencer的描述,我把這個調用放在文檔的最後。感謝你們。 – user2340048 2014-10-17 04:48:14

0

文檔加載完成後,任何document.write()都會清除當前文檔並啓動一個新的空白文檔,因此您之前在文檔中所做的任何操作都將被清除。

由於您在onload處理程序中調用此函數,因此文檔已經完成加載,因此您的document.write()將開始一個新文檔。