在编写某些内容时,我遇到了一些非常奇怪的东西。
以下代码可以正常使用:
document.querySelectorAll("button").forEach(function(e) {
e.addEventListener("click", function() {
console.log(e);
});
});
但是,以下情况并非如此:
document.getElementsByTagName("button").forEach(function(e) {
e.addEventListener("click", function() {
console.log(e);
});
})
我在这里很困惑。据我所知,document.getElementsByTagName("button")
返回与document.querySelectorAll("button")
完全相同的数组。我错了吗?这里有什么问题?它与forEach
?
旁注:
我遇到this post,但它没有回答我的问题。
只是强调:我没有使用jQuery。
P.S。 - 我已经意识到forEach
与常规for
循环之间的差异和利弊,所以除非forEach
具体说明这两个函数的工作方式不同,否则forEach
vs for
辩论与我的问题无关。
答案 0 :(得分:4)
区别在于从这些方法返回的是什么。 querySelectorAll
返回NodeList,getElementsByTagName
返回HTMLCollection。它们都不支持泛型Array.forEach,但NodeList实现了自己的NodeList.forEach,这就是你在这里所要达到的。