querySelectorAll
函数返回的是一个 NodeList
对象,它类似于数组,但并不是一个真正的数组,因此不能直接使用数组的方法,比如 forEach
或 map
。如果你想在返回的元素集合上挂起处理程序,可以使用以下几种方法:
你可以将 NodeList
转换为数组,然后使用数组的方法来挂起处理程序。
const elements = document.querySelectorAll('.my-class');
// 转换为数组
const elementsArray = Array.from(elements);
// 挂起处理程序
elementsArray.forEach(element => {
element.addEventListener('click', () => {
console.log('Element clicked:', element);
});
});
for
循环你也可以直接使用 for
循环来遍历 NodeList
并挂起处理程序。
const elements = document.querySelectorAll('.my-class');
for (let i = 0; i < elements.length; i++) {
elements[i].addEventListener('click', () => {
console.log('Element clicked:', elements[i]);
});
}
forEach
的 polyfill如果你不想将 NodeList
转换为数组,可以使用 forEach
的 polyfill。
if (window.NodeList && !NodeList.prototype.forEach) {
NodeList.prototype.forEach = Array.prototype.forEach;
}
const elements = document.querySelectorAll('.my-class');
elements.forEach(element => {
element.addEventListener('click', () => {
console.log('Element clicked:', element);
});
});
这种方法适用于需要在多个元素上挂起相同处理程序的场景,例如:
通过以上方法,你可以在 querySelectorAll
返回的元素集合上挂起处理程序,并且可以根据具体需求选择最适合的方法。
领取专属 10元无门槛券
手把手带您无忧上云