Javascript 获取所有指定元素以在其上添加事件侦听器的最佳实践

Javascript 获取所有指定元素以在其上添加事件侦听器的最佳实践,javascript,dom,Javascript,Dom,我只是在问自己,在这两个代码之间,获取所有元素而不获取JS异常的最佳方式是什么 #一, #二, 提前感谢您的回复:)如果在数组上循环,则无需检查数组的长度,如果数组中没有任何元素,则不会发生任何事情 请注意,getElementsByClassName()返回类似数组的对象,而不是实际的数组,但它确实有一个length属性。看 你可以试试 var els=document.getElementsByClassName('yourClass'); 对于(变量i=0;i

我只是在问自己,在这两个代码之间,获取所有元素而不获取JS异常的最佳方式是什么

#一,

#二,


提前感谢您的回复:)

如果在数组上循环,则无需检查数组的长度,如果数组中没有任何元素,则不会发生任何事情

请注意,
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 use
length
属性,您得到了什么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() { ... })
}