2013-06-13 2 views
105

부모, grand-parent, great-grand-parent에 클래스가 있는지 확인하는 방법이 jQuery에서 있습니까?jQuery를 사용하는 조상이 있는지 확인하십시오.

$(elem).parent().parent().parent().parent().hasClass('left') 

그러나, 코드의 가독성을 위해 내가 이런 종류의 물건을 피하기 싶습니다

나는 코드에서 이런 종류의 일을 나에게 남아있는 마크 업 구조를 가지고있다. "어떤 부모/조부모/증조부모가이 수업을 듣는다"고 말할 수있는 방법이 있습니까?

jQuery 1.7.2를 사용하고 있습니다. 그 중 하나가 일치 할 경우

답변

214
if ($elem.parents('.left').length) { 

} 
+11

감사합니다. 그 기록을 위해 JS에서 진리 값으로'.length'를 처리하는 연습은 JS에서 상당히 많이 일어나지 만'.length> 0'을 이해하는 것이 훨씬 명확하고 이해하기 쉽습니다. – dooleyo

+0

다음은 jQuery [.parents()] (https://api.jquery.com/parents/) documentation –

6

당신은 지정된 .class 선택과 parents 방법을 사용하여 확인할 수 있습니다

if ($elem.parents('.left').length != 0) { 
    //someone has this class 
} 
61

이 요소 조상을 필터링하는 방법에는 여러 가지가 있습니다.

if ($elem.closest('.parentClass').length /* > 0*/) {/*...*/} 
if ($elem.parents('.parentClass').length /* > 0*/) {/*...*/} 
if ($elem.parents().hasClass('parentClass')) {/*...*/} 
if ($('.parentClass').has($elem).length /* > 0*/) {/*...*/} 
if ($elem.is('.parentClass *')) {/*...*/} 

는 선택기를 확인하는 동안, closest() 방법 요소 자체를 포함주의. 당신이 유일한 선택이있는 경우

또는$elem는, 예를 들어 #myElem, 당신은 사용할 수 있습니다 매칭 :

if ($('.parentClass:has(#myElem)').length /* > 0*/) {/*...*/} 
if(document.querySelector('.parentClass #myElem')) {/*...*/} 

당신이 스타일링 목적으로 만 그 조상 클래스 중 하나를 따라 요소를 일치 시키려면 CSS 규칙을 사용하십시오. :

.parentClass #myElem { /* CSS property set */ } 
+2

이 방법을 사용하는 것이 좋습니다 (테스트하지 않고). Elem.parent는 부모 dom strucutre 전체를 횡단합니다. closest()는 해당 요소가있는 가장 가까운 부모를 찾으면 더 효율적입니다. 이것은 무식한 추측입니다. 보통 closest()를 사용합니다. 내 블로그를 조사하기 위해 새로운 주제를 찾은 것처럼 들립니다. : P – dudewad

+0

@dudewad 네, 그렇습니다.하지만 최근입니다. 구식 jq 버전 인 AFAIK에서 이것은 의미가 없습니다. closest()를 사용하여 첫 번째로 일치하는 부모에서 부모 루프가 중단되지 않았지만 이제는 그 것입니다. (jq 버전 이후로는 알 수 없지만이 문장에서 정확하다고 확신 함) –

+0

정보를 제공해 주셔서 감사합니다. 이상한 그들은 첫 번째 버전에서 휴식을 구축하지 않았을. – dudewad

관련 문제