2012-03-10 37 views
1

我想獲得身體標記的長度或項目。 但是,似乎getElementsByTagName不能在NodeList方面工作。 我該怎麼做?document.getElementsByTagName不起作用。我怎樣才能得到身體的NodeList的長度?

<script type=text/javascript> 
var b = document.getElementsByTagName('body');                                
console.log(b);   // <body>...</body> 
console.log(b.length); // 0  
console.log(b[0]);  // undefined 
console.log(b.item(0)); // null 
</script> 

謝謝。

[編輯] 我加入整個身體。

<html> 
<head> 
<script type=text/javascript> 
var b = document.getElementsByTagName('body');                                
console.log(b);   // <body>...</body> 
console.log(b.length); // 0  
console.log(b[0]);  // undefined 
    console.log(b.item(0)); // null 
</script> 
</head> 
<body> 
<div id='test'> 
<h2>Hello</h2> 
<p>test</p> 
<p>test</p> 
<p>test</p> 
<p>test</p> 
<p>test</p> 
<p>test</p> 
</body> 
</html> 

回答

1

你必須把它的後文件已加載。您可以通過將其放置在主體的最後,或者在事件觸發指示DOM已準備好之前不執行代碼來完成此操作。當您在<head>標籤有它,有沒有尚未<body>標籤 - 它並沒有被創建。這就是爲什麼你的代碼在你的例子中不起作用(現在你已經包含了完整的例子)。

一旦你把代碼放在一個安全的地方,所以它執行DOM被加載後,你的代碼工作完全正常,我在Chrome。我得到這個輸出:

[<body>​</body>​] 
1 
<body>​</body>​ 
<body>​</body>​ 

這段代碼有什麼意義?有一個<body>標籤,您可以隨時參考document.body

+0

我想測試是否工作getElementsByTagName。 – kinakomochi 2012-03-10 07:23:17

+0

@KenichiTakano - 當你的身體標記創建後執行的代碼,如果你已經創建了標記之前執行的代碼將無法正常工作'document.getElementsByTagName(「身體」)'對我的作品.. – jfriend00 2012-03-10 07:58:29

+0

@ jfriend00那工程!謝謝:) – 2017-03-14 10:44:09

2

如果您想要列出文檔中的所有節點,請嘗試:document.getElementsByTagName('*')document.querySelectorAll('*')。有(通常情況下)在文檔中只有一個<body> - 標籤,所以document.getElementsByTagName('body')長度應爲1

如果您需要您的文檔的<body>內的所有元素的列表,使用方法:

document.getElementsByTagName('body')[0].getElementsByTagname('*'); 
+0

謝謝! getElementsByTagName('*')的作品。但仍然getElementsByTagName('body')。length返回0. – kinakomochi 2012-03-10 07:24:10

+0

也許你的腳本不在頁面底部(在''之前,你可以將它移動到那裏,或者使用'window.onload'來應用你的腳本。反正,還看到這樣的jsfiddle例如:http://jsfiddle.net/KooiInc/VmZmB/在頁面的jsfiddle生成腳本是@頁面底部 – KooiInc 2012-03-10 08:01:29

11

將腳本放置在頁面的末尾,或將其放置在一個函數中,並在整個頁面加載後調用它。

+0

感謝我加入整個代碼 – kinakomochi 2012-03-10 07:26:56

5

把腳本代碼後身體元件關閉。如果您在創建元素之前嘗試訪問它,則不會找到它。例如,下面應該給你你期待的結果:

<html> 
<head> 
</head> 
<body> 
<div id='test'> 
<h2>Hello</h2> 
<p>test</p> 
<p>test</p> 
<p>test</p> 
<p>test</p> 
<p>test</p> 
<p>test</p> 
</body> 
<!-- script code moved --> 
<script type=text/javascript> 
var b = document.getElementsByTagName('body');                                
console.log(b);   // <body>...</body> 
console.log(b.length); // 0  
console.log(b[0]);  // undefined 
    console.log(b.item(0)); // null 
</script> 

</html> 
+1

哇,它的工作,謝謝。!非常! – kinakomochi 2012-03-10 07:36:11