2014-11-14 102 views
1

該腳本在加載document之前運行,爲什麼console.log(b)顯示集合中的元素?爲什麼document.getElementsByName的長度爲0,儘管有元素?

如果console.log(b)有元素,那麼爲什麼console.log(b[0])顯示undefinedconsole.log(b.length)0

<html> 
 
    <head> 
 
    
 
    <script> 
 
     function test(){ 
 
      var b = document.getElementsByName('a'); 
 
      console.log(b); 
 
      console.log(b[0]); 
 
      console.log(b.length); 
 
     } 
 
     test(); 
 
    </script> 
 
    </head> 
 
    
 
    <body> 
 
    <form id="a" name="a"></form> 
 
    </body> 
 
</html>

+0

因爲您的表單中沒有任何元素? – 2014-11-14 15:05:47

+4

返回的集合是一個「活動列表」。它隨着項目添加到DOM中或從DOM中刪除而自動更新。因此,當您查看集合的控制檯視圖時,會顯示其當前狀態,而「b [0]」視圖會獲取您進行console.log()調用的狀態。 – 2014-11-14 15:06:11

+0

您可以等待DOM準備就緒,這可能有所幫助:http://api.jquery.com/ready/ – mparkuk 2014-11-14 15:10:37

回答

1

getElementsByName返回NodeList。它是一個包含匹配節點列表的對象,因此b不爲空。

但是,在DOM準備就緒之前,您正在運行腳本,因此列表的長度爲0,沒有第一個對象。您需要延遲腳本執行,直到DOM被解析爲止,此時表單將存在。

相關問題