jquery 如何用“委派”代替“现场”?

unftdfkk  于 2022-12-22  发布在  jQuery
关注(0)|答案(1)|浏览(125)

我读过无数篇文章,了解如何使用jQuerydelegate比使用"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 });

你知道为什么我的委托代码不起作用吗?还有,关于如何使它更有效有什么建议吗?

    • 更新**:

问题的关键在于,"#tab"和"#A,#B,#C"在页面加载时都不存在。这些属性是通过AJAX调用动态插入到页面中的。因此,这是否意味着我必须使用live over delegate?

elcex8rz

elcex8rz1#

更新您的更新:)-是的,如果是这种情况,请坚持使用.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);

相关问题