2010-02-17 126 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