我正在学习jQuery,当我读到有关$('.className').bind('click',function(){})
方法的时候,我发现了一个疑问。
此方法是否将我的事件处理程序附加到DOM中的className
的每个实例?如果是这样,那么这是一个好方法 - 比如将一个事件处理程序附加到页面上的很多实例是一个开销权吗?
或者它是否正在使用事件委托 - 比如,处理程序将绑定到一些公共父级,它将使用e.target equalTo className
并执行click事件,以便处理程序仅绑定到一个DOM元素?
请帮我理解。感谢。
还有一个疑问。如果我确实将事件附加到每个dom元素,那么过载是否会生效?它会在执行时对浏览器造成额外的负担,还是会让dom变得沉重(我的意思是说,难以解析dom)?
答案 0 :(得分:4)
确实会将您的回调绑定到每个元素。如果你有很多与选择器匹配的元素,那么使用事件委托肯定会更好。
但是,您不必手动操纵e.target
。 jQuery有专门针对这个场景的重载.on()
方法:
$('#parent').on('click', '.children', function (){});
您应该始终将事件处理程序附加到最近的父级,以便最少量的元素受到事件侦听器的影响。
答案 1 :(得分:0)
$('.className').bind('click',function(){})
确实将事件处理程序附加到dom中的每个可用元素...事件委托也有一些问题,而不是只监听目标元素中需要评估所有单击的事件委托父级中发生的事件再次发生委托目标选择器...
那说,如果有很多元素,我更喜欢事件委托....但更喜欢将处理程序附加到最直接的共同祖先元素,而不是将其绑定到body
或document