2010-02-17 174 views
1

將以下內容保存在一個文件(如file.htm),它的工作原理=>打印出「3」。 但是如果我取消註釋'document.write(「Hello:」);'它不再工作(輸出「0」)。有人知道爲什麼奇怪的輸出與document.links.length

<html> 
<head> 
<script language="JavaScript" type="text/javascript"> 
function display() { 
    //document.write("Hello: "); 
    document.write(document.links.length + "<br>"); 
} 
</script> 
</head> 
<body onload="display()"> 

<A href="link0.htm">Link 0</A> 
<A href="link1.htm">Link 1</A> 
<A href="link2.htm">Link 2</A> 

</body> 
</html> 

回答

6

在Chrome中,我觀察到了這種行爲,並且大多數其他瀏覽器也可能發生。原因如下:

沒有第一個document.write,它按預期工作。沒什麼特別的。

但是,如果包含第一個document.write,它將覆蓋文檔的全部內容,因此沒有任何鏈接。第二個document.write正確報告文檔中有0個鏈接。

+0

實際上是在打字!做得好 – vpram86 2010-02-17 17:20:48

+2

差不多,不要用document.write。永遠。 – Matchu 2010-02-17 17:21:23

+0

我在IE,Firefox和Chrome上試過了。我認爲你是正確的,你的解釋很清楚。謝謝! – yeeen 2010-02-17 17:24:26

1

首先,不要使用document.write()來「顯示」你的輸出。如果這只是一個測試,請使用alert()方法。 document.write()只能在頁面加載時使用。一旦流關閉並且文檔被加載,document.write()將會產生不可預知的結果。

其次,不要使用document.links,請嘗試使用document.getElementsByTagName(「A」)。這會給你一個文檔中所有錨定標籤的數組。

+0

它可能對其他標籤很有用,但是如何在文檔中用「___」來計算標籤的數量? – yeeen 2010-02-17 17:27:07

+0

你沒有問這個問題。您詢問了有關鏈接(),也稱爲「錨點」標記,並且您的示例完全顯示了這些標記,僅此而已。 – Robusto 2010-02-17 17:33:15

+0

我的示例完全計算定位標記的數量。 – yeeen 2010-02-17 17:49:03

0

因爲當您第一次撥打document.write時,它將刪除DOM中的所有鏈接。它用「你好:」代替了document.body的整個innerHTML。

反正你永遠不應該使用document.write