javascript - 将事件绑定(bind)到多个元素而不循环(vanilla JS)

标签 javascript

我正在努力实现相当于:

$('div').on('click', function() {
    // Do something
});

但没有 jQuery。我最初的想法是使用 for 循环来遍历集合中的所有元素,但我猜测有一种不使用循环(某种 native 方法?)实现这一点的更好方法。

var elems = document.getElementsByTagName('div');

function someEvent() { // Generic function to test against
    alert('event fired');
}

for (var i=0, j = elems.length; i < j; i += 1) {
    elems[i].addEventListener("click", someEvent);
}

有没有不包含库的更优雅的方法?

最佳答案

你要的是event delegation .它的工作原理是将单个事件绑定(bind)到多个节点的父节点,并分析事件的目标节点。例如,您可以将 onmouseup 绑定(bind)到 body 节点,当在 div 节点上释放鼠标触发时, body 事件对象将在 target 属性中包含该 div。您可以分析目标以确保它符合特定条件。

更好的解释方法是提供一个 working example .

document.body.onmouseup = function (event) {
    var target = event.target || event.toElement;

    if (target.nodeName.toLowerCase() == "div") {
       alert(target.childNodes[0].nodeValue);
    };
};

这个例子的主要兴趣点是 target 变量,以及验证我们的 targetdiv 的条件。条件甚至可以是 className 或您想要的任何内容。

关于javascript - 将事件绑定(bind)到多个元素而不循环(vanilla JS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20579995/

相关文章:

javascript - 如何在 OrientDB 中的自定义 javascript 函数内从 JSON 中提取查询结果

javascript - 无法使 animate() 方法中的不透明度属性正常工作

javascript - 如何获取 NodeJS 中另一个文件中声明的变量的动态值

javascript - 有人可以解释一下#ifeq ../section key如何使用handlebar.js工作吗

javascript - 具有最小/最大的随机数组

javascript - 在单击选项卡项时隐藏和创建另一个对象 - HTML CSS

javascript - 显示几秒钟后如何隐藏django消息

javascript - 如何使弹出div可拖动

c# - 将 div 及其中的内容转换为图像

javascript - 将图像调整为屏幕高度但保持比例