javascript - 如何捕获中间的事件

标签 javascript

我想附加一个点击事件监听器,并在此上下文中使用“data-attr”运行一些操作,尽可能优雅。

<div id="container">

    <div class="group" data-attr="info1">
        <div class="a-casual-class-1">***</div>
        <div class="a-casual-class-2">AAA</div>
    </div>

    <div class="group" data-attr="info2">
        <div class="a-casual-class-1">***</div>
        <div class="a-casual-class-2">AAA</div>
    </div>

</div>

A) 仅向根 (#container) 发送一个事件

  • 检查 event.target 是否为 a-casual-class-1 或 a-casual-class-2 并获取父元素以检索数据属性或
  • 从根和数据属性中检索 .group 元素。

B)我可以首先获取“.group”的节点列表,进行循环并将事件监听器附加到每个元素。

有没有更好的方法来处理这种情况?

最佳答案

A) Just a single event to the root (#container)

您可以使用document.querySelectorAll()来定位所有内部div。

B) I could get first the nodes list of '.group', make a loop and attach the element.

当你创建一个选择器时,它会给你一个类似于 dom 节点对象的数组。您必须循环遍历它们并绑定(bind)事件。

总体思路是,由于事件往往会在 DOM 中冒泡,因此您可以将事件绑定(bind)到#container 的子 div 上。现在,每当您单击 .group 的子 div 时,它总是会找到绑定(bind)事件的 div 并执行回调。

var divs = document.querySelectorAll('#container > div');

// divs.forEach(function(div){ // it worked at chrome 57
[].forEach.call(divs, function(div){ // changed if user is on old version of browser
  div.addEventListener('click', function(e){
    var data = this.dataset.attr;
    console.log(data);
  });
});
<div id="container">
  <div class="group" data-attr="info1">
    <div class="a-casual-class-1">***</div>
    <div class="a-casual-class-2">AAA</div>
  </div>

  <div class="group" data-attr="info2">
    <div class="a-casual-class-1">***</div>
    <div class="a-casual-class-2">AAA</div>
  </div>
</div>

关于javascript - 如何捕获中间的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43582481/

相关文章:

javascript - 如何在使用 ajax 更改事件对象后刷新 fullcalendar v4

javascript - 使用 InfiniteLoader、Table、Column、AutoSizer 和 CellMeasurer 构建响应式无限滚动表

javascript - 这个 javascript 会做任何事情还是不完整?

javascript - Node JS 与 node-cmd : wait until execution of prior cmd call is finished

c# - 如何将 C# 代码值访问到 javascript 中?

javascript - 为变量内的函数设置 boolean 值

javascript - Angular 翻译 UTF8 字符 (pascalprecht.translate)

javascript - $.post 失败,错误为 "...is not a function"

javascript - 如何将从 fetch 请求检索到的对象添加到 React 中的状态数组,然后更新 View ?

javascript - 访问内部属性名称以计算 ES6 中的新属性