Jquery持久性css选择器相当于'.live()'

时间:2010-04-06 15:18:56

标签: css-selectors jquery

所以今天我刚刚遇到了'live()'函数,它将任何未来和过去的元素绑定到您选择的任何事件,例如'onclick'。

现在我每次通过ajax加载新按钮时都需要设置如下按钮...

$('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}});
$('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}});
$('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}});

所以,每次我使用ajax添加一个新按钮时,不是调用这些行,而是告诉JQuery设置我的按钮有类似的方法ANYTIME我添加新的按钮吗?

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

嗯,不是真的。但是只要Ajax调用成功,就会触发函数.ajaxSuccess()。所以你可以这样做:

$('body').ajaxSuccess(function() {
    $('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}});
    $('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}});
    $('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}});
});

但是这将在与类的任何链接上运行,而不仅仅是在新的链接上运行。但是,如果您按时添加它们(即不是一次a.btn.plus次),您可以使用:last选择器(a.btn.plus:last)。


您还可以通过回调函数创建一个函数:

function links() {
   $('a.btn.plus').button({icons:{primary:'ui-icon-plusthick'}});
   $('a.btn.pencil').button({icons:{primary:'ui-icon ui-icon-pencil'}});
   $('a.btn.bigx').button({icons:{primary:'ui-icon ui-icon-closethick'}});
}

并在Ajax调用中:

$.ajax({
   //...
   success: function(msg){
      links();
   }
});

这样你就可以将父元素传递给函数,以便只在这个元素中找到链接(所以代码只能在新的链接上工作)。


最后一个选项是生成一个自定义事件,但最后这类似于在你的情况下进行函数调用,所以你获得的不多。

答案 1 :(得分:1)

您也可以在成功功能中使用委托

$("body").delegate("a.btn", "hover", function(){
$(this).toggleClass("hover");
});

答案 2 :(得分:0)

有一个名为livequery的Jquery插件可以满足您的需求。

我喜欢将此插件视为Jquery .live(),但不需要事件('click')等。

您可以在这里找到更多信息//

Jquery - Live Query Plugin