jQuery多选择器订单

问题描述:

我想选择多个按钮,然后单击第一个按顺序。像COALESCE功能。jQuery多选择器订单

我尝试这样做:

$(".selector1, .selector2, .selector3").first().click(); 

这工作,但选择跟随DOM顺序,而不是我的选择查询顺序。任何建议?

jQuery的总是返回元素在DOM顺序,所以你需要做的东西沿着这些路线:

$.each(['.selector1', '.selector2', '.selector3'], function(i, selector) { 
    var res = $(selector); 
    if (res.length) { 
     res.first().click(); 
     return false; 
    } 
}); 

你可以穷得成一个jQuery扩展,像这样:

$.coalesce = function(selectors) { 
    var match; 
    var selector = $.each(selectors, function(i, selector) { 
     var res = $(selector); 
     if (res.length) { 
      match = res; 
      return false; 
     } 
    }); 
    return match || $([]); 
}; 

而且然后调用

$ .coalesce([ 'selector1' 。,' .selector2' , ” .selector3' ])第一()点击()。;

+1

你对此的看法如下:($(“。selector1”)[0] || $(“。selector2”)[0])。click(); 不是很漂亮,但它的作品... – Tobia 2012-04-18 09:30:39

+0

这将工作,但很快会添加几个选择器时会变得很难看。你可以为上面的代码创建一个jQuery扩展,并将其命名为$ .coalesce(['。selector1','.selector2'])first()。click(); – Gerry 2012-04-18 09:32:53

遍历每个元素()会给出正确的顺序,就像这样:

var elms = [".selector1", ".selector2", ".selector3"]; 

$.each(elms, function(index, item) { 
    $(item).append('<br><br>This is item '+index); 
});​ 

FIDDLE

+0

你的意思是简单的选择器有DOM顺序和相同的选择器,每个都有另一个顺序?!?! – Tobia 2012-04-18 09:27:56

+0

你当然是对的!起初写的方式和Gerry一样,但最后一刻我改变了它,当我注意到另一个与我几乎相同的答案时,没有注意到结果也改变了。编辑我的答案。 – adeneo 2012-04-18 10:02:43

您可以使用get()方法获取元素的数组,然后将它们连接起来,像这样:

$($(".selector1").get().concat($(".selector2").get(), $(".selector3").get())).first().click();