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
( 직접 하위 범위가 있는 클래스 classA
OR classB
로 div를 선택 )
답변
Daniel A. White Solution은 수업에 적합합니다.
donee_1_card 와 같은 입력 필드를 찾아야하는 상황이 있습니다. 여기서 1은 색인입니다.
내 솔루션은
$("input[name^='donee']" && "input[name*='card']")
비록 그것이 얼마나 최적인지는 확실하지 않습니다.