9

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

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

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

我还看到这个getElementsByTagName("div").length 对任何网页都返回零,但是我不明白它发生的确切原因以及如何解决它。我还注意到这发生在 Firefox、IE、Chrome 上。

任何人都可以帮助我吗?

4

3 回答 3

9

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>
于 2011-04-30T21:45:04.347 回答
1

这是因为 JS 的异步行为。您正在尝试在呈现元素之前显示元素的值。为了避免这种情况,您可以将“async”属性添加到您的标签中,如下例所示:

<script type="text/javascript" src="myTag.js" async></script>
于 2020-08-05T14:57:48.410 回答
0

你的脚本应该有属性“deter”来检测标签

于 2020-06-27T03:48:09.653 回答