我有一个包含 HTML 元素的数组(我用 querySelectorAll()
填充它),我试图在该数组中找到元素的索引,但控制台给出了错误:
Uncaught TypeError: rows.indexOf is not a function
我用它来用所需的 HTML 元素填充数组:
rows = document.querySelectorAll("#selectableTableBody > tr");
找到索引:
document.getElementById("tableItem_10087528").onclick = function (e) {
console.log(rows.indexOf(this));
}
这是我在控制台中测试的图像(这没有意义):
值得注意的是,这些元素是用 javascript 生成的,然后使用 querySelectorAll()
放入数组中
这是一个jsfiddle如果你想检查整个事情
I have an array that contains HTML elements(I filled it with querySelectorAll())
不,你不知道,这就是问题所在。 :-) querySelectorAll
返回一个 NodeList
( MDN | spec ),而不是数组。
您可以通过多种方式将其转换为数组:
rows = Array.from(document.querySelectorAll(/*...*/));
或(在 NodeList
可迭代的最新环境中):
rows = [...document.querySelectorAll(/*...*/)];
或在旧环境中:
rows = Array.prototype.slice.call(document.querySelectorAll(/*...*/));
可重复性:This answer讨论了在数组可迭代( native 或由于 polyfill)但 NodeList
不是(还)的平台上的 polyfilling NodeList
迭代能力。