getElementsByTagName()。length返回零

时间:2011-04-30 21:32:18

标签: javascript getelementsbytagname

我正在尝试做一件简单的事情,例如:

var elements = document.getElementsByTagName("input");
console.log(elements);
console.log(elements.length);

console.log(elements)显示包含28个输入元素的NodeList,但elements.length始终为0.

我也看过这个getElementsByTagName("div").length returns zero for any webpage但是我不明白究竟发生了什么,以及如何解决它。我也注意到这种情况发生在Firefox,IE,Chrome上。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:8)

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>

答案 1 :(得分:1)

发生这种情况是由于JS的异步行为。您试图在渲染元素之前显示它的值。 为了避免这种情况,您可以在代码中添加“ async”属性,如以下示例所示:

<script type="text/javascript" src="myTag.js" async></script>

答案 2 :(得分:0)

您的脚本应具有“ deter”属性以检测标签