3

我正在学习 jQuery,当我读到$('.className').bind('click',function(){})方法时,出现了一个疑问。

className此方法是否将我的事件处理程序附加到DOM 中的每个实例?如果是这样,这将是一个好方法——比如将事件处理程序附加到页面上的许多实例是一种开销,对吗?

还是使用事件委托——比如,处理程序将绑定到某个公共父级,该父级将使用e.target equalTo className并执行单击事件,因此该处理程序仅绑定到一个 DOM 元素?

请帮我理解。谢谢。


还有一个疑问。如果我确实将一个事件附加到每个 dom 元素,那么重载会在哪里生效?它会在执行时对浏览器造成额外的负载,还是会使 dom 变得很重(我的意思是很重,难以解析 dom)?

4

2 回答 2

4

它确实将您的回调绑定到这些元素中的每一个。如果你有很多匹配选择器的元素,那么使用事件委托肯定会更好。

但是,您不必手动摆弄e.target. jQuery 有.on()专门针对这个场景的重载方法:

$('#parent').on('click', '.children', function (){});

您应该始终将事件处理程序附加到可能的最近的父级,以便最少数量的元素将受到事件侦听器的影响。

于 2013-09-03T17:20:01.787 回答
0

$('.className').bind('click',function(){})确实将事件处理程序附加到 dom 中的每个可用元素...事件委托也有其共享的问题,例如,它需要再次评估委托父级中发生的所有单击事件,而不是只监听目标元素中的事件委托目标选择器...

也就是说,如果有很多元素,我更喜欢事件委托......但更喜欢将处理程序附加到最直接的公共祖先元素而不是将其绑定到bodydocument

于 2013-09-03T17:20:27.663 回答