2011-04-30 107 views
6

我试图做一个简单的事情,例如:的getElementsByTagName()长度返回零

var elements = document.getElementsByTagName("input"); 
console.log(elements); 
console.log(elements.length); 

的的console.log(要素)显示了含有28种输入元素节点列表,但elements.length总是0.

我也看到了这个getElementsByTagName("div").length returns zero for any webpage但是我不明白究竟是什么原因发生以及如何解决它。我也注意到这发生在Firefox,IE,Chrome上。

任何人都可以帮助我吗?

+0

不太记得了肯定,但尝试做elements.length() - 长度可能是一个功能,不能remembe。 r – 2011-04-30 21:41:21

+0

您确定在文档/ DOM加载时您正在调用您的代码吗?可能是,在调用getElementsByTagName时,不存在输入元素,但由于NodeLists是动态的,因此当文档加载时,元素将包含全部28个输入。 – Rafael 2011-04-30 21:44:05

+0

似乎没有加载DOM。将其复制并粘贴到页面的URL中,以查看DOM加载后的内容。 javascript:var elements = document.getElementsByTagName(“input”); alert(“elements has”+ elements.length +“children”); – adorablepuppy 2011-04-30 21:48:59

回答

7

NodeList是一个实时集合,非延迟脚本立即执行(请参阅脚本延迟)。

试试这个,你会得到的会发生什么的想法:

<html> 
<head> 
    <title></title> 
    <style></style> 
    <script type="text/javascript"> 
    var elements = document.getElementsByTagName("div"); 
    alert(elements.length); 
    </script> 
</head> 
<body> 
    <div>1</div> 
    <script type="text/javascript"> 
    //var elements = document.getElementsByTagName("div"); 
    alert(elements.length); 
    </script> 
</body> 
</html> 
+0

他说'console.log(elements)'和'console.log(elements.length)'报告不一致。如果你把它放在这里,我敢打赌它会显示1个元素,'1'和2个元素,'2'。 – hyperslug 2011-04-30 21:52:27

+0

我明白了。我会将这个标记为正确的答案,因为您已经陷入了以示例形式给出的麻烦,尽管上面的两个注释都是正确的:)谢谢大家! :) – mobius 2011-04-30 22:04:48

+1

你是怎么解决它的? – ikel 2012-02-22 05:09:59

相关问题