document.getElementsByTagName не работает. Как я могу получить длину NodeList тела? - PullRequest
2 голосов
/ 10 марта 2012

Я хочу получить длину или элемент тега body.Но, похоже, 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>

Ответы [ 4 ]

11 голосов
/ 10 марта 2012

Поместите скрипт в конец страницы или поместите его в функцию и вызовите его после загрузки всей страницы.

7 голосов
/ 10 марта 2012

Поставьте код скрипта после элемент body закрыт.Если вы попытаетесь получить доступ к элементу до его создания, он не будет найден.Например, следующее должно дать вам ожидаемый результат:

<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>
3 голосов
/ 10 марта 2012

Если вы хотите получить список всех узлов в вашем документе, попробуйте: document.getElementsByTagName('*') или document.querySelectorAll('*').В документе (обычно) есть только один тег <body>, поэтому длина document.getElementsByTagName('body') должна составлять 1.

Если вам нужен список всех элементов в пределах <body> вашего документа,использование:

document.getElementsByTagName('body')[0].getElementsByTagname('*');
1 голос
/ 10 марта 2012

Вы должны положить его ПОСЛЕ загрузки документа.Вы можете сделать это, поместив его в самый конец тела или не выполняя код, пока не сработает событие, указывающее, что DOM готов.Там, где он есть в теге <head>, тега <body> пока нет - он не был создан.Вот почему ваш код не работает в вашем примере (теперь, когда вы включили полный пример).

Как только вы поместите код в безопасное место, чтобы он выполнялся после загрузки DOM, ваш код работаетотлично подходит для меня в Chrome.Я получаю этот вывод:

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

Какой смысл этого кода?Существует ровно один тег <body>, и вы можете ссылаться на него в любое время как document.body.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...