【发布时间】:2018-02-07 16:12:12
【问题描述】:
我正在尝试通过使用addEventListener() 方法来模仿jQuery.on("click", ".target", handler)。我对 Stackoverflow 的研究得到了这样的结果:Native addEventListener with selector like .on() in jQuery。
所以,在有人将我的问题标记为重复之前,请仔细阅读我的要求和演示。
这是我的 Plunker 演示 https://plnkr.co/edit/so8Sur?p=preview(我在测试时正在运行 chrome)。以下是对它的解释:
- “jQuery 方式”的紫色框按照我的预期运行,无论我点击
.target框还是.target-child的子级,都应该显示消息弹出窗口。 - 但是对于我的自定义事件绑定的绿色框,具有自定义功能:
customOn(selector, type, filter, handler),它只会在单击.target框时显示弹出窗口,但当我单击.target-child时不会显示弹出窗口。
所以,我的问题是,我想知道在我的演示中单击.target-child 时,jQuery 使用了什么样的魔法来触发事件,而实际的选择器过滤器是.target。 jQuery 是否会在每次需要处理委托事件时遍历 DOM 树以检查任何选择器匹配?如果是,我觉得它会占用足够的计算资源(也许是 RAM),对吗?我希望有更有效的方法,而不是像那样遍历。
任何答案和评论将不胜感激。提前致谢。
【问题讨论】:
-
根本没有魔法,它只是使用事件冒泡。你的逻辑似乎过于复杂了。
-
@RoryMcCrossan,感谢您的评论。实际上,我对事件冒泡知识并不是很擅长。如果你能给我一个答案,通过使用那些事件冒泡来模仿 jQuery 方式,那就太好了。
-
该答案在您链接到的副本中。
-
我记得我已经尝试过了,结果也出乎意料,这里是基于我对链接到的 Stackoverflow 的理解的演示:plnkr.co/edit/2eWO61?p=preview。如果你点击“目标的孩子”框,它不会像“jQuery方式”那样做任何事情(期望显示弹出窗口)
标签: javascript jquery