这个jQuery指令的最佳缩写是什么?

时间:2010-10-10 21:19:11

标签: javascript jquery html forms

$( "input[role=submit_action], button[role=submit_action], div[role=submit_action], span[role=submit_action], a[role=submit_action]").live(  "click", function() {
});

这也是:

$( "input[role=submit_action], input[role=submit_require]").live(  "click", function() {
    if ($(this).attr('role') == "submit_action") {
            // do this...
    }
    else {
            // do this...
    }
});

例如,缩写可以是:

$("input[role=(submit_action|submit_require)]"

4 个答案:

答案 0 :(得分:5)

我在这里使用.delegate()来提高效率(不要遍历最初执行选择器的每个DOM元素),如下所示:

$(document.body).delegate("[role=submit_action]", "click", function() {
  //do stuff
});

这里的区别在于,与.live()不同,它在启动时便宜很多,因为$("role=submit_action]")(甚至在.live()调用之前)必须迭代DOM检查中的所有元素对于role属性,您可以使用.delegate()绕过此费用。

由于表现是一个问题,不要相信我的话,在这里自己测试一下:
 http://jsperf.com/live-vs-delegate-test

答案 1 :(得分:2)

我不会改变第一个,因为它的效率是如此。它可以缩短使用:

$('[role=submit_action]')

..但是这需要遍历DOM中的每个元素,这会大大减慢它的速度。你可以在第二个例子中使用带有选择器的启动,这可能仍然是好的:

$('input[role^=submit_]')...

无论如何,如果没有破坏,请不要修理它。 :)

答案 2 :(得分:2)

如果没有其他元素可以包含此role,则可以将选择器编写为

$( "[role=submit_action]").live(  "click", function() {});

然而,我不会,因为它在绑定功能之前进行了相当昂贵的搜索。请改用delegate

$('body').delegate('[role=submit_action]','click',function() {});

这在功能上是等效的,除了它在绑定处理程序之前不需要昂贵的DOM遍历。

答案 3 :(得分:0)

尝试:

$( "[role=submit_action]").live("click", function() {
 //...
});

对于第二个,您是否尝试在同一页面上使用它们?