Javascript 获取所有指定元素以在其上添加事件侦听器的最佳实践
我只是在问自己,在这两个代码之间,获取所有元素而不获取JS异常的最佳方式是什么 #一, #二,Javascript 获取所有指定元素以在其上添加事件侦听器的最佳实践,javascript,dom,Javascript,Dom,我只是在问自己,在这两个代码之间,获取所有元素而不获取JS异常的最佳方式是什么 #一, #二, 提前感谢您的回复:)如果在数组上循环,则无需检查数组的长度,如果数组中没有任何元素,则不会发生任何事情 请注意,getElementsByClassName()返回类似数组的对象,而不是实际的数组,但它确实有一个length属性。看 你可以试试 var els=document.getElementsByClassName('yourClass'); 对于(变量i=0;i
提前感谢您的回复:)如果在数组上循环,则无需检查数组的长度,如果数组中没有任何元素,则不会发生任何事情 请注意,
getElementsByClassName()
返回类似数组的对象,而不是实际的数组,但它确实有一个length属性。看
你可以试试
var els=document.getElementsByClassName('yourClass');
对于(变量i=0;i
您可以检查“forEach”
是否在项目中
var items = document.querySelectorAll('.items');
if (items.length && "forEach" in items) {
items.forEach(function(item) {
item.addEventListener('click', function() { ... })
})
} else {
if (items.length && !"forEach" in items) {
items = Array.prototype.slice.call(document.querySelectorAll('.items'), 0);
items.forEach(function(item) {
item.addEventListener('click', function() { ... })
})
}
}
或者,使用扩展元素来确保我们有一个数组
var items = [...document.querySelectorAll('.items')];
if (items.length) {
items.forEach(function(item) {
item.addEventListener('click', function() { ... })
})
}
或使用进行循环的
for (let item of document.querySelectorAll('.items')) {
item.addEventListener('click', function() { ... })
}
您根本不需要if
条件,并且queryselectoral()
返回一个节点列表,该列表作为length
属性,因此您不需要`Array.prototype.slice.call`just to use to uselength
属性,您得到了什么JS异常?@charlietfl Yes.forEach()
可以链接到.queryselectoral()
谢谢,你是对的,我不需要if条件,也不需要检查长度如果你没有遇到任何异常,并且只是假设,答案很可能取决于意见。els不是实际的arrayno,它是一个类似数组的对象,具有长度属性,对吗?这就是我使用for循环的原因,我只是想指出这一点,因为OP在上面做了些什么编辑了我的答案,让这更清楚,谢谢。
var items = [...document.querySelectorAll('.items')];
if (items.length) {
items.forEach(function(item) {
item.addEventListener('click', function() { ... })
})
}
for (let item of document.querySelectorAll('.items')) {
item.addEventListener('click', function() { ... })
}