javascript - 在 NodeList 上添加事件监听器

标签 javascript addeventlistener nodelist

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);
}

最佳答案

如果不循环遍历每个元素,就无法做到这一点。当然,您可以编写一个函数来为您完成此操作。

function addEventListenerList(list, event, fn) {
    for (var i = 0, len = list.length; i < len; i++) {
        list[i].addEventListener(event, fn, false);
    }
}

var ar_coins = document.getElementsByClassName('coins');
addEventListenerList(ar_coins, 'dragstart', handleDragStart); 

或更专业的版本:

function addEventListenerByClass(className, event, fn) {
    var list = document.getElementsByClassName(className);
    for (var i = 0, len = list.length; i < len; i++) {
        list[i].addEventListener(event, fn, false);
    }
}

addEventListenerByClass('coins', 'dragstart', handleDragStart); 

而且,虽然您没有询问 jQuery,但这是 jQuery 特别擅长的事情:

$('.coins').on('dragstart', handleDragStart);

关于javascript - 在 NodeList 上添加事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12362256/

相关文章:

javascript - 是否所有 html 节点都有 "getElementsBy"和 getElementBy"版本?

javascript - Node.childNodes的forEach方法?

javascript - 使用文件协议(protocol)调用 Chrome 中 iframe 中定义的 JavaScript 函数

javascript - 如何在 Jquery 中使用字符串作为类名?

javascript - 如何为循环中的每个按钮使用多个事件监听器?

actionscript-3 - 在点击处理程序中访问 .name 属性

javascript - 表单内的单击事件监听器

javascript - 通过 iosocket 向 Meteor 发送数据,但不是从 Meteor 客户端(搭载 Meteor 的 io-socket)

javascript - React - 使用 componentDidUpdate 根据从另一个函数传递的数据更新状态

javascript - 使用 getElementsByClassName 迭代 DOM 元素的正确方法是什么?