javascript - 确定事件冒泡通过的元素

标签 javascript jquery events dom

给定一个像这样的简化文档:

<div id="outerDiv">
    <div id="innerDiv">
        <input id="theInput" />
    </div>
</div>

如果我单击 #theInput,单击事件将冒泡到 #innerDiv,然后是 #outerDiv。我想做的是在 #outerDiv 上放置一个处理程序来监听这些点击,然后检查“气泡链”以查看哪些元素之前收到了相同的点击事件。

因此,例如,单击 #theInput #outerDiv 中的处理程序会给我 [#outerDiv, #innerDiv, #theInput]。如果我在 #theInput 外部单击,但仍在 #innerDiv 内部,那么结果将是 [#outerDiv, #innerDiv]

需要澄清的是,实际文档并不像这样简单,每个级别可能有任意数量的子级或兄弟级。另外,当我提到 #theInput 时,我指的是元素本身,也就是说,我不是在寻找 ID 数组。最后,鉴于可能有任意数量的元素,我想避免向中间元素添加额外的处理程序。

我家欢迎 jQuery。

最佳答案

看起来像:

function myHandler(ev) {
  var $bubbleParents = $(ev.target).parents();

  // ...
}

就是你所需要的,特别是。如果您使用的是 jQuery,并且您的事件处理程序会将 this 绑定(bind)到与处理程序代码相关的元素。目标的父项列表将告诉您事件可能冒泡到的所有元素,并且您的 this 引用将是该列表中的元素之一。 (我认为 parent 的名单是“从内到外”的顺序,但我必须检查一个 fiddle 。)因此你可以知道哪些元素已经被“访问过”并且还没有。

关于javascript - 确定事件冒泡通过的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5420399/

相关文章:

javascript - 将选定的单词拆分为字符并添加空格

html - 如何在滚动时创建 Elm Lang 事件?

c# - 从订阅者取消订阅 .NET 事件

javascript - $ ('div, span' , $ ('.test' )).selector 会输出什么? jQuery 错误?

javascript - 文本中间的省略号(Mac 风格)

JavascriptCore 不从类中导出方法

javascript - 如何为 Canvas 的drawImage方法实现SVG的preserveAspectRatio ="xMinYMin slice"。

jQuery 视差图像仅在第一页加载时行为异常

jquery - 委托(delegate)事件触发两次

python - 程序空闲一段给定时间后调用函数