遍历NodeList

时间:2019-12-11 17:22:35

标签: javascript cross-browser nodelist

我正在寻找一种将来通过NodeList(例如,从element.querySelectorAll(selector)开始迭代)的方法,并且可以跨浏览器兼容。以前我一直在使用ES6 Spread功能,但是IE不支持散布,因此我使用了填充程序。我觉得这有点矫kill过正,效率低下。然后,我遇到了黑客Array.prototype.forEach.call。它有效,但对我来说却很臭。

迭代NodeList的最佳方法是什么?

我偏向于向后兼容和干净的代码,但如果您的回答也适用于以下任何其他条件,将不胜感激。

  1. 可读性
  2. 未来的证明
  3. 速度

我看过JavaScript iterate through NodeList,它介绍了几种方法。但是,无需担心可读性,兼容性等问题。

我遇到的一些方法是:

const elems = document.querySelectorAll('img');

[].forEach.call(elems, function (o) { console.log(o) });

[...elems].foreach(function (o) { console.log(o) });

for (var i = 0; i < elems.length; i++) {
    console.log(elems[i]);
}

for (var i = elems.length - 1; i >= 0; i--) {
    console.log(elems[i]);
}

// User-defined
var forEach = function (array, callback, scope) {
    for (var i = 0; i < array.length; i++) {
        callback.call(scope, i, array[i]);
    }
};
forEach(elems, function (index, value) {
    console.log(index, value);
});

1 个答案:

答案 0 :(得分:2)

我建议使用MDN的Array.from polyfill

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from#Polyfill

Array.from(nodeList).forEach(node => {})