【发布时间】:2021-06-09 19:39:26
【问题描述】:
我会在纯 Javascript 中模拟 jQuery .on( events , selector , data) 方法的主要功能。
例如
$(document).on('click','.button',function() {
console.log("jquery onclick");
});
我认为制作这样的东西就足够了
document.addEventListener('click',function(e) {
if(e.target.className == 'button2') {
console.log("It works");
}
});
但是当我有这个 html 结构时:
<button class="button2">Hello <span>World</span></button>
当在span 元素上触发点击事件时,我的脚本不起作用,因为e.target 是span。 (对于这个问题,我忽略了具有多个类的元素的复杂性以及跨浏览器兼容性)
source of jQuery 读起来并不简单,我不明白它是如何工作的(因为第一段代码,在 jQuery 中,适用于我的 html 结构)。
我需要这个方法,因为我的 html 是动态的,并且这个类的按钮被创建、删除和重新创建了很多次。我不想每次都添加监听器。
如果可能,我会避免包含 jquery 库。
那么,我能做到吗?
这里是jsFiddle 用于测试。
【问题讨论】:
-
也许 jQuery 代码如此复杂是有原因的……
-
@Asad 很有趣...但这不会因为 DOM 太深而太重?
-
@chumkiu Kolink 已经发布了一个这样的例子。这将是资源密集型的,但如果您附加到靠近元素的祖先,应该不会太糟糕。
-
@Asad 但如果我点击任何其他元素,这会为每个元素创建一个正则表达式,直到正文。
标签: javascript dom-events