2010-03-13 7 views
97

그래서 두 개의 jQuery 객체를 비교하여 부모 요소가 페이지 본문인지 확인하는 방법을 알아 보려고합니다. jQuery 객체를 어떻게 비교합니까?

if ($(this).parent() === $('body')) ... 

내가이 잘못 알고 있지만, 아무도 내가에서 얻고 무엇을 이해하면, 그들이이 일을 올바른 방법으로 날 지점 수 : 여기

내가 가진 무엇인가?

+2

'var에 $ 부모 = $ (이) .parent(), $ 바디 = $ ('몸');' 'var에 theSame = $ parent.is ($ 본체),' HTTP : //api.jquery.com/is/#is-jQuery-object – Victor

+1

$ (this) .parent(). is ($ ('body')); // 또는 '$ body'이외의 다른 항목이 있는지 확인하십시오. http://stackoverflow.com/a/6986013/112100 – Omu

답변

156

당신은 예컨대 : 원시 DOM 요소를 비교해야

if ($(this).parent().get(0) === $('body').get(0)) 

또는

if ($(this).parent()[0] === $('body')[0]) 
+1

jQuery 객체가 단일 DOM 요소와 일치하는 경우에만 동일성이 보장됩니다. 일치하는 항목이 여러 개 있으면 각 항목을 비교하기 위해 일종의 루프가 필요합니다. –

+1

@ 지미, 네,하지만 OP 요구 사항만으로 충분합니다. "부모 요소가 본문 인 경우 ..."을 알고 싶습니다. – CMS

+2

줄이기 : if (this.parentNode === document.body); – ehynds

59

왜 :

if ($(this).parent().is("body")) { 
    ... 
} 

?

+0

아니면'if ($ (this) .parent(). is ($ ("body"))) – dieend

17

루프가 필요하지 않으므로 단일 첫 번째 노드를 테스트 할 필요가 없습니다. 동일한 길이이고 동일한 노드를 공유하는 것 이외에는 아무 것도 필요하지 않습니다. 다음은 작은 코드 단편입니다. 자신의 용도로 jquery 플러그인으로 변환 할 수도 있습니다.

jQuery(function($) { 
    // Two separate jQuery references 
    var divs = $("div"); 
    var divs2 = $("div"); 

    // They are equal 
    if (divs.length == divs2.length && divs.length == divs.filter(divs2).length) {   

    // They are not 
    } else {} 
}); 
+0

다음 div가 동일하지 않습니까? '

abc
' '
def
' –

+0

아니요, 필터는 동일하지 않은 DOM 요소를 전달하지 않습니다. – tbranyen

2

나는이 답변을 발견하고 어떤 것이 더 좋은지 궁금해했습니다. 모두 귀하의 필요에 따라 다르지만 가장 쉽게 입력하고 읽고 실행할 수 있습니다. 여기 제가 결정을 내리려고 만든 perf 테스트 케이스가 있습니다.

http://jsperf.com/jquery-objects-comparison

+0

날 가장 빠른 DOM 엘리먼트 2 처리 : 다른 모든보고 된 브라우저에서도 동일하게 보입니다. –

+0

바로 첫 번째 것과 동일하지만 javascript의 기본 배열 구문 분석을 사용합니다. – Salketer

관련 문제