我读过无数文章,如何使用JQuery delegate比使用“live”事件更有效。
因此,我无法将现有的Live代码转换为使用Delegate。
$("#tabs li:eq(0)").live('click',function(){ //...code });
$('#A > div.listing, #B > div.listing, #C > div.listing').live('mouseover',function(){ // ...code });
当我用我认为更高效的委托代码替换以前的代码时,我的页面不会加载。
$("#tabs li:eq(0)").delegate('click',function(){ //...code });
$('#A > div.listing, #B > div.listing, #C > div.listing').delegate('mouseover',function(){ // ...code });
知道为什么我的委托代码不起作用?另外,有关如何提高效率的任何建议吗?
更新:
问题的思考部分是,在页面加载时,网页上不会出现“#tabs”和“#A,#B,#C”。这些属性通过AJAX调用动态插入到页面上。因此,这是否意味着我必须使用live over delegate?
答案 0 :(得分:2)
您的更新更新:) - 是的,如果是这种情况,请坚持使用.live()
,除非您的DOM 非常深,否则无限小性能差异。
上一个回答:您的委托功能应如下所示:
$("#tabs").delegate('li:eq(0)', 'click', function(){ //...code });
$('#A, #B, #C').delegate('> div.listing', 'mouseover', function(){ // ...code });
这取决于#tabs
不在作为任何ajax调用的一部分而被替换的内容中,#A
,#B
和#C
相同。 .delegate()
的格式为:
$(selectorOrNonReplacedParent).delegate(childSelector, event, function);