forEach 适用于 querySelectorAll,但不适用于 getElementsByTagName?

And*_*rew 3 javascript foreach for-loop selectors-api getelementsbytagname

在编写代码时,我遇到了一些非常奇怪的事情。

下面的代码工作得很好:

document.querySelectorAll("button").forEach(function(e) {
    e.addEventListener("click", function() {
        console.log(e);
    });
});
Run Code Online (Sandbox Code Playgroud)

但是,以下情况不会:

document.getElementsByTagName("button").forEach(function(e) {
    e.addEventListener("click", function() {
        console.log(e);
    });
})
Run Code Online (Sandbox Code Playgroud)

我在这里很困惑。据我所知,document.getElementsByTagName("button")返回与document.querySelectorAll("button"). 我错了吗?这里有什么问题?和 有关系forEach吗?

边注:

我遇到了这篇文章,但它没有回答我的问题。

只是强调:我没有使用 jQuery。

PS - 我已经知道forEachvs 常规for循环之间的差异和优缺点,所以除非forEach是这两个函数无法以相同方式工作的具体原因,否则forEachvsfor辩论与我的问题无关。

Kar*_*ren 5

不同之处在于从这些方法返回的内容。querySelectorAll返回一个NodeListgetElementsByTagName返回一个HTMLCollection。它们都不支持通用的Array.forEach但 NodeList 实现了它自己的NodeList.forEach这就是你在这里打的。


归档时间:

查看次数:

1260 次

最近记录:

9 年,9 月 前