2011-04-30 122 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