我正在尝试做一件简单的事情,例如:
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上。
任何人都可以帮助我吗?
答案 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”属性以检测标签