2012-04-18 3 views
3

여러 개의 버튼을 선택하고 첫 번째 버튼을 클릭하고 싶습니다. 뭔가 같은 COALESCE 기능. 이것은 작동하지만 선택은 DOM 순서와 나의 선택 쿼리 순서를 다음과jQuery 다중 선택기 주문

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

:

나는이 시도. 어떠한 제안? 당신이이 라인을 따라 뭔가를해야합니다 있도록

답변

5

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 || $([]); 
}; 

그리고 . 먼저 ([ '. selector1', '.selector2' '.selector3'])

$ .coalesce 호출()()을 클릭.; 각각의 요소

+1

그리고 이것에 대해 어떻게 생각하십니까? 매우 아름답지는 않지만 작동합니다 ... – Tobia

+0

매우 효과적 일지 모르지만 조만간 몇 개의 셀렉터를 추가 할 때 추한 것입니다. 위의 경우에 jQuery 확장을 생성하여 $ .coalesce ([selector. ','.selector2 '])와 같이 호출 할 수 있습니다. – Gerry

2

순회은()과 같이, 올바른 순서를 줄 것이다 :

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

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

FIDDLE

+0

간단한 선택기에 DOM 순서가 있고 각각에 동일한 선택자가 다른 순서가 있음을 의미합니까?!?! – Tobia

+0

물론 맞습니다! 처음에 Gerry가했던 것과 같은 방법으로 썼지 만, 마지막 순간에 그것을 바꿨습니다. 다른 답변이 내 것과 거의 같았습니다. 결과도 바뀌 었습니다. 내 대답을 편집했습니다. – adeneo

0

당신은 요소의 배열은 다음을 연결하여 얻을 수 get() 방법을 사용할 수 있습니다, like :

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