Javascript 在HTMLCollection上迭代
我有一个HTMLCollection,其中包含使用脚本标记的所有HTML节点。我通过Javascript 在HTMLCollection上迭代,javascript,arrays,htmlcollection,Javascript,Arrays,Htmlcollection,我有一个HTMLCollection,其中包含使用脚本标记的所有HTML节点。我通过constscriptnodes=document.getElementsByTagName('script')收集它们 如果我在Chrome开发工具中记录整个集合,它的长度是10。如果我展开集合并查看其属性,我可以看到超过10个。我甚至可以看到一个名为length的属性,它是12。这意味着有两个属性不可访问 我尝试访问scriptNodes[10]、scriptNodes[11],但它们未定义。即使APIHTM
constscriptnodes=document.getElementsByTagName('script')收集它们代码>
如果我在Chrome开发工具中记录整个集合,它的长度是10
。如果我展开集合并查看其属性,我可以看到超过10个。我甚至可以看到一个名为length
的属性,它是12。这意味着有两个属性不可访问
我尝试访问scriptNodes[10]、scriptNodes[11]
,但它们未定义。即使APIHTMLCollection.nodeItem(index)
返回未定义的属性,我也可以看到这些“额外”属性的内容
我在
中尝试了for..of,for..,但这些都没有被记录
我应该如何访问这些额外/未定义的属性?这与可枚举性有关吗
谢谢 许多浏览器扩展可以向页面添加脚本标记。我猜这就是为什么会出现这些额外的脚本标记。您可能正在加载额外的脚本标记之前的某个时间点访问脚本标记。如果将代码放在setTimeout中,则可能会得到所有脚本节点。试试看,如果是这样,请告诉我们
$(document).ready(function () {
setTimeout(function () {
var scriptNodes = document.getElementsByTagName('script');
console.log('scriptNodes', scriptNodes);
}, 2000); // or an even longer delay if you like
});
我可以保证没有浏览器扩展在我的html中添加任何脚本。log('scriptNodes',scriptNodes);正在记录所有脚本,但在for循环中,它不会访问这些额外属性。