NodeList是否支持addEventListener . 如果不是,将EventListener添加到NodeList的所有节点的最佳方法是什么 . 目前我正在使用下面显示的代码段,是否有更好的方法来执行此操作 .
var ar_coins = document.getElementsByClassName('coins');
for(var xx=0;xx < ar_coins.length;xx++)
{
ar_coins.item(xx).addEventListener('dragstart',handleDragStart,false);
}
7 回答
在es6中,你可以使用Array.from从nodelist做一个数组 .
或者只使用箭头功能
没有循环遍历每个元素就没有办法做到这一点 . 当然,您可以编写一个函数来为您完成 .
或更专业的版本:
而且,虽然你没有问过jQuery,但这是jQuery特别擅长的东西:
实际上有一种没有循环的方法:
这种方式用于我的一个单行助手库 - nanoQuery .
我能想到的最好的是:
请注意,这使用了ES6功能,因此请务必首先进行转换!
最简单的例子是将此功能添加到
NodeList
现在你可以这样做:
以同样的方式,你可以做一个
forEach
循环使用:
EDIT :请注意,自2016年11月起,NodeList.prototype.forEach已经存在于FF中 . 虽然没有IE支持
我想另一种选择是使用
Object.defineProperty
在NodeList
上定义addEventListener
. 这样您可以像处理单个节点一样处理NodeList .举个例子,我在这里创建了一个jsfiddle:http://jsfiddle.net/2LQbe/
关键是这个:
您也可以使用原型设计