我在这里和其他地方的了解之间的差异在网络上一些帖子live()和delegate().但是我没有找到我正在寻找的答案(如果这是一个骗局请告诉我).
我知道live和之间的区别delegate是live不能在链中使用.我也读过某些地方,delegate在某些情况下更快(更好的性能).
我的问题是,是否存在应该使用live而不是delegate?
UPDATE
我已经设置了一个简单的测试来查看性能的差异.
我还添加了.on()jQuery 1.7+中提供的新功能
结果几乎总结了答案中所述的性能问题.
.live()除非您的jQuery版本不支持,否则请勿使用.delegate(). .delegate()除非您的jQuery版本不支持,否则请勿使用.on()..live()和之间的差异.delegate()大于delegate()和之间的差异.on().
lon*_*day 147
我从不使用live; 我认为使用的好处delegate是如此巨大,以至于压倒性的.
一个好处live是它的语法非常接近于bind:
$('a.myClass').live('click', function() { ... });
Run Code Online (Sandbox Code Playgroud)
delegate但是,使用稍微冗长的语法:
$('#containerElement').delegate('a.myClass', 'click', function() { ... });
Run Code Online (Sandbox Code Playgroud)
然而,在我看来,这对于实际发生的事情要更加明确.您没有从live示例中发现实际上正在捕获事件document; 有delegate,很显然,事件捕捉发生在#containerElement.你可以做同样的事情live,但语法变得越来越可怕.
为要捕获的事件指定上下文也可以提高性能.通过该live示例,必须将整个文档的每次单击与选择器进行比较,a.myClass以查看它是否匹配.有delegate,那只是其中的元素#containerElement.这显然会提高性能.
最后,live要求您的浏览器查找a.myClass 当前是否存在. delegate仅在触发事件时查找元素,从而提供进一步的性能优势.
NB 在幕后delegate使用live,因此您可以使用您可以执行的任何live操作delegate.我的回答是关于它们,因为它们是常用的.
另请注意,在现代jQuery中执行事件委派的最佳方式既不是live也不delegate是.新的语法(从jQuery 1.7开始)与该on函数一起使用.语法如下:
$('#containerElement').on('click', 'a.myClass', function() { ... });
Run Code Online (Sandbox Code Playgroud)
use*_*716 24
它们完全相同,除了:
.delegate()允许您缩小页面的本地部分,同时.live()必须处理整个页面中的事件..live() 从浪费的DOM选择开始当你打电话时.delegate(),它只是转身并调用.live(),但传递额外的上下文参数.
https://github.com/jquery/jquery/blob/master/src/event.js#L948-950
因此,我总是使用.delegate().如果您确实需要它来处理页面上的所有事件,那么只需将其body作为上下文.
$(document.body).delegate('.someClass', 'click', function() {
// run handler
});
Run Code Online (Sandbox Code Playgroud)
旧版本的jQuery实际上具有delegate功能.您只需要在调用时将选择器或元素作为上下文属性传递.live().当然,它需要加载到页面上.
$('.someClass', '#someContainer').live('click',function() {
// run handler
});
Run Code Online (Sandbox Code Playgroud)
而你的行为与...相同.delegate().
| 归档时间: |
|
| 查看次数: |
39092 次 |
| 最近记录: |