document.getElementsByTagName不起作用。如何获取body的NodeList的长度?

时间:2012-03-10 06:34:16

标签: javascript dom

我想得到身体标签的长度或项目。 但是,似乎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>

5 个答案:

答案 0 :(得分:11)

将脚本放在页面的末尾,或将其放在一个函数中,并在整个页面加载后调用它。

答案 1 :(得分:6)

在关闭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>

答案 2 :(得分:3)

如果您想要文档中所有节点的列表,请尝试:document.getElementsByTagName('*')document.querySelectorAll('*')。文档中通常只有一个<body>标记,因此document.getElementsByTagName('body')的长度应为1.

如果您需要文档<body>中所有元素的列表,请使用:

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

答案 3 :(得分:1)

您必须在文档加载后放置它。您可以通过将其放在正文的最后或不执行代码直到事件触发指示DOM已就绪为止。您在<head>标记中的位置,还没有<body>标记 - 尚未创建。这就是为什么你的代码在你的例子中不起作用的原因(现在你已经包含了完整的例子)。

将代码放在安全的地方,以便在加载DOM后执行,您的代码在Chrome中对我来说非常合适。我得到了这个输出:

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

这段代码有什么意义?只有一个<body>代码,您可以随时将其引用为document.body

答案 4 :(得分:0)

它不起作用的原因仅仅是因为脚本是在元素加载之前运行的。

改变

school_ids:
  school1: '001'

  #important school2
  school2: '002'


  school3: '003'
targets:
  neighborhood1:
    schools:
      - school1-paloalto
    teachers:
      - 33
  neighborhood2:
    schools:
      - school2-paloalto
    teachers:
      - 35
  neighborhood3:
    schools:
      - school3-paloalto
    teachers:
      - '31'

致:

-

然后它就可以毫无问题地运行了。