Javascript 什么';这条jQuery指令的最佳缩写是什么?

Javascript 什么';这条jQuery指令的最佳缩写是什么?,javascript,jquery,html,forms,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(

这也是:

$( "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...
    }
});
尝试:


对于第二个问题,您是否试图在同一页面上同时使用这两个选项?

我不会更改第一个选项,因为它的效率很高。可使用以下方法将其缩短:

$( "[role=submit_action]").live("click", function() {
 //...
});
…但这需要遍历DOM中的每个元素,这将显著降低它的速度。在第二个示例中,您可以使用带选择器的start,这可能仍然是正确的:

$('[role=submit_action]')
无论如何,如果它没有坏,就不要修理它。:)

为了提高效率(不要遍历最初执行选择器的每个DOM元素),我在这里使用如下方法:

$('input[role^=submit_]')...
与之不同的是,它在启动时要便宜得多,因为
$(“role=submit\u action]”
(甚至在调用之前)必须迭代DOM中的所有元素以检查
role
属性,因此您可以通过以下方法绕过此开销

由于性能是一个问题,不要相信我的话,在这里自己测试:

如果没有其他元素具有此
角色,则可以将选择器编写为

$(document.body).delegate("[role=submit_action]", "click", function() {
  //do stuff
});
但是,我不会,因为它在绑定函数之前进行了相当昂贵的搜索。改用
委托

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

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

@Cris-它非常快,事实上比这里列出的任何其他方法都快,你是说它慢是因为你在某个地方准备好了,还是因为你已经测试过了?:)我测试过了。。。什么更快$('.searchme')或$('[role=searchme]')???第二个选项更快,你知道的,但我认为更快:$('input[role=searchme]')。。。你怎么看?@Cris-这取决于你的浏览器和DOM中的哪些元素(例如,它们主要是输入的吗?这会缩小多少范围?),但是
.delegate()
根本不执行选择器,所以你的比较是没有意义的。。。没有任何选择器总是比任何选择器都快。@Cris-您必须意识到,
.delegate()
中的选择器在事件实际发生之前是不会被检查的,然后只针对作为事件目标的单个元素进行检查。这就是为什么
.delegate()
应该是您选择的方法。尼克在这里肯定是对的(因为他几乎无处不在:-)@Cris:你到底有多少HTML?!我很难相信这是一个瓶颈。这很好,但是输入,DIV,SPAN,a呢??:$(“(输入,SPAN,a,DIV)[角色^=提交]”)--->像这样。。。有可能吗?
$( "[role=submit_action]").live(  "click", function() {});
$('body').delegate('[role=submit_action]','click',function() {});