在Javascript事件委派中使用循环
我有以下代码:在Javascript事件委派中使用循环,javascript,jquery,event-handling,dom-events,event-delegation,Javascript,Jquery,Event Handling,Dom Events,Event Delegation,我有以下代码: var page = document.getElementById("contentWrapper"); page.addEventListener("click", function (e) { var target, clickTarget, propagationFlag; target = e.target || e.srcElement; while (target !== page) {
var page = document.getElementById("contentWrapper");
page.addEventListener("click", function (e) {
var target, clickTarget, propagationFlag;
target = e.target || e.srcElement;
while (target !== page) {
clickTarget = target.getAttribute("data-clickTarget");
if (clickTarget) {
clickHandler[clickTarget](e);
propagationFlag = target.getAttribute("data-propagationFlag");
}
if (propagationFlag === "true") {
break;
}
target = target.parentNode;
}
});
我在整个项目(单页应用程序)中使用单个事件处理程序。使用属性“data clickTarget”标识事件处理程序,并使用“data propagationFlag”防止事件传播
如果DOM树很大,我应该使用循环方法还是传统的事件处理程序?如果文档很大,并且所选元素远离触发事件的元素,委托的事件处理程序可能会很慢。。。从JQuery文档: 在文档顶部附近附加许多委托事件处理程序 树可能会降低性能。每次事件发生时,jQuery都必须 将该类型的所有附加事件的所有选择器与 从事件目标到事件顶部的路径中的元素 文件。为获得最佳性能,请在文档中附加委派事件 尽可能靠近目标元素的位置。避免过度 使用document或document.body处理大型服务器上的委托事件 文件 正如文档中所说,对于“点击”事件,这可能不是一个严重的问题(因为用户不会疯狂地点击页面),但对于鼠标移动或滚动等事件,响应速度慢可能会变得非常烦人
委托处理程序的特殊特性是,即使是后来添加到DOM中的新元素也会使用该处理程序,但您真的需要它吗?如果您不是在编写库,而是在编写应用程序,那么您可以控制添加新元素的时间,从而可以将偶数处理程序附件分解到元素创建中(换句话说,与其使用只创建新元素的函数,不如使其创建元素并自动注册标准事件处理程序).如果dom树很大,不要用jQ来衡量它。@Dude这是一个荒谬的说法。它对OP没有帮助。你使用的是jQuery,那么为什么你要使编码如此复杂。使用
这个关键字和数据()
@Tomalak为什么?我提供的建议对OP和任何看到它的人都有好处,我应该停止吗?@Dude我认为这句话过于宽泛和简单。我缺少了一点证据/反思。还有其他更简单/有效的方法来实现事件委派吗?