我有以下代码:
$("ul.relatedAlbums li").hover(function(){
$(this).css({fontWeight:"bold"});
},function(){
$(this).css({fontWeight:"normal"});
});
我听说过有关事件委托和速度表现的好事.我想象使用jQuery的委托方法,它会像这样:
$("ul.relatedAlbums").delegate("li","hover",function(){
$(this).css({fontWeight:"bold"});
},function(){
$(this).css({fontWeight:"normal"});
});
但是在阅读文档时,它说这种方法就像使用live事件.而且我一直都知道使用实时事件效率低下.那么,有人可以启发我实现最佳实践吗?
最佳答案
只需指出,.delegate()目前实际上在内部使用.live(),而贬低.live()则意味着需要付出一些框架努力.
除非您要向页面动态添加元素,否则可以将其用作第一个示例.当您有一个交互式页面时,.live()和.delegate会在其中进行更改,其中您要更改其中包含的元素.
编辑:反对者:从jQuery论坛:
http://forum.jquery.com/topic/depreciating-live
引用此代码:
委托:function(选择器,类型,数据,fn){
返回this.live(类型,fn,选择器);
},
我的观点是,如果合适的话,特定的选择器将限制事件,仅选择.delegate()并不总是最好的,并且没有全局“总是这样做”.否则,为什么不对最好的所有方法都使用.delegate()呢?
什么时候委托合适?当选择器DOES具有公共父级时,例如OP描述的常用li,或者需要通过.delegate()绑定到公共父级时.不适用于单数形式的#selector,但值得检查存在多个或动态放置元素的类或元素选择器.