JavaScript通过节点列表进行迭代
我正在寻找一种迭代节点列表(不包括长度)的最佳方法。我正在使用:JavaScript通过节点列表进行迭代,javascript,loops,nodelist,Javascript,Loops,Nodelist,我正在寻找一种迭代节点列表(不包括长度)的最佳方法。我正在使用: var foo = document.querySelectorAll('[id^=foo_id]') console.log(foo) 返回的节点列表包含所有必需元素+长度的最后一个条目: 0: input#foo_id_... 1: input#foo_id_... .................. n: input#foo_id_... length: n+1 我想知道迭代节点列表最有效的方法是
var foo = document.querySelectorAll('[id^=foo_id]')
console.log(foo)
返回的节点列表包含所有必需元素+长度的最后一个条目:
0: input#foo_id_...
1: input#foo_id_...
..................
n: input#foo_id_...
length: n+1
我想知道迭代节点列表最有效的方法是什么。我可以利用列表长度等,但想知道是否有更“优雅”的方法。尽管节点列表不是数组,但可以使用forEach()对其进行迭代
另请参见最简单的方法是for循环:
for (let i = 0; i < foo.length; i++) {
// Do stuff
}
如果要特别使用map
,请使用Array.from
作为第二个参数,该参数是要应用于map
的回调
Array.from(foo, e => /* .map callback */);
在较旧的环境中:
Array.prototype.slice.call(foo).forEach(e => /* Do stuff */);
(我知道你可以在节点列表上使用数组方法,但是如果你坚持使用一种数据类型会更容易。)你问题中的第一行代码是无效的。你尝试了什么?你发现了什么低效率?也被愚弄了。你可能想看看,上面说,“一般来说,将节点列表转换为数组或使用数组的函数引用节点列表不是一个好主意。”编辑@Hereticsmonkey,谢谢@但是汉堡比比萨饼好(这只是一个不合理的粗体说法,不知道重点在哪里),而且这个答案也被否决了,就像这个一样。有
节点列表。forEach
,请使用它。@neuhas vanilla.js已经为节点列表内置了forEach。
Array.prototype.slice.call(foo).forEach(e => /* Do stuff */);