[jquery] jQuery 또는 선택기?

jQuery 선택기에 “OR”논리를 갖는 방법이 있는지 궁금합니다. 예를 들어, 요소가 classA 또는 classB 클래스를 가진 요소의 자손이라는 것을 알고 있으며 다음과 같은 일을하고 싶습니다 elem.parents('.classA or .classB'). jQuery는 이러한 기능을 제공합니까?



답변

쉼표를 사용하십시오.

'.classA, .classB'

공간을 생략하도록 선택할 수 있습니다.


답변

결합해야하는 여러 jQuery 객체가있는 경우 쉼표를 사용하는 것만으로는 충분하지 않을 수 있습니다.

.add () 메소드는 결과 집합 선택된 요소를 추가

// classA OR classB
jQuery('.classA').add('.classB');

보다 장황 '.classA, .classB'하지만 다음과 같이 더 복잡한 선택기를 만들 수 있습니다.

// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));


답변

정확히이 기능을 위해 매우 간단한 (5 줄의 코드) 플러그인을 작성했습니다.

http://byrichardpowell.github.com/jquery-or/

“이 요소를 가져 오거나 해당 요소가 없으면이 요소를 사용하십시오”라고 효과적으로 말할 수 있습니다. 예를 들면 다음과 같습니다.

$( '#doesntExist' ).or( '#exists' );

수락 된 답변이 이와 비슷한 기능을 제공하지만 두 선택기 (쉼표 앞뒤에 있음)가 모두 존재하면 두 선택기가 모두 반환됩니다.

Google을 통해이 페이지에 방문하는 모든 사람에게 도움이되기를 바랍니다.


답변

element = element1 ||의 표준 구문을 사용하려는 경우 JavaScript가 진실한 첫 번째 것을 리턴하는 element2, 당신은 정확히 그렇게 할 수 있습니다 :

element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');

실제로 찾은 첫 번째 요소를 반환합니다. 그러나 더 나은 방법은 jQuery 선택기 쉼표 구문 (발견 된 요소의 배열을 반환)을 다음과 같은 방식으로 사용하는 것입니다.

element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];

첫 번째로 찾은 요소를 반환합니다.

나는 때때로 그것을 사용하여 목록에서 활성 요소를 찾거나 활성 요소가없는 경우 기본 요소를 찾습니다. 예를 들면 다음과 같습니다.

element = $('ul#someList').find('li.active, li:first')[0] 

활성 클래스가있는 리를 반환하거나 존재하지 않는 경우 마지막 리를 반환합니다.

작동합니다. 그러나 || 배열 접근 방식은 이미 요소를 찾았더라도 모든 요소를 ​​찾으려고 시도하지만 진실한 것을 발견하면 처리를 중지합니다. 그런 다음 || 생성자는 반환 할 선택기를 찾기 전에 여러 선택기를 거쳐야 할 경우 잠재적으로 성능 문제가 발생할 수 있습니다. 그것은 논리적 일 수 있습니다). 그러나 일반적으로 선택기가 다소 긴 문자열 인 경우 배열 방식을 사용합니다.


답변

마지막으로 해킹 방법을 찾았습니다.

div:not(:not(.classA,.classB)) > span

( 직접 하위 범위가 있는 클래스 classAOR classB로 div를 선택 )


답변

Daniel A. White Solution은 수업에 적합합니다.

donee_1_card 와 같은 입력 필드를 찾아야하는 상황이 있습니다. 여기서 1은 색인입니다.

내 솔루션은

$("input[name^='donee']" && "input[name*='card']")

비록 그것이 얼마나 최적인지는 확실하지 않습니다.


답변