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' ])第一()点击()。;
答
遍历每个元素()会给出正确的顺序,就像这样:
var elms = [".selector1", ".selector2", ".selector3"];
$.each(elms, function(index, item) {
$(item).append('<br><br>This is item '+index);
});
答
您可以使用get()
方法获取元素的数组,然后将它们连接起来,像这样:
$($(".selector1").get().concat($(".selector2").get(), $(".selector3").get())).first().click();
你对此的看法如下:($(“。selector1”)[0] || $(“。selector2”)[0])。click(); 不是很漂亮,但它的作品... – Tobia 2012-04-18 09:30:39
这将工作,但很快会添加几个选择器时会变得很难看。你可以为上面的代码创建一个jQuery扩展,并将其命名为$ .coalesce(['。selector1','.selector2'])first()。click(); – Gerry 2012-04-18 09:32:53