jQuery 객체를 어떻게 비교 하시겠습니까?


101

그래서 부모 요소가 페이지의 본문인지 확인하기 위해 두 개의 jQuery 객체를 비교하는 방법을 알아 내려고합니다.

내가 가진 것은 다음과 같습니다.

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

나는 이것이 틀렸다는 것을 알고 있지만 누군가 내가 얻는 것을 이해한다면 올바른 방법으로 나를 가리킬 수 있습니까?


2
var $parent = $(this).parent(), $body = $('body'); var theSame = $parent.is($body); api.jquery.com/is/#is-jQuery-object
빅터

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

답변:


158

원시 DOM 요소를 비교해야합니다. 예 :

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

또는

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

1
이는 jQuery 객체가 단일 DOM 요소와 일치하는 경우에만 동일성을 보장합니다. 일치하는 항목이 여러 개인 경우 각 항목을 비교하려면 일종의 루프가 필요합니다.
Jimmy Cuadra

1
@Jimmy는 네 그러나 이것은 그가 단지 알고 싶어, 영업 요구 사항에 충분하다 "... 부모 요소는 신체 ...이"
CMS

2
단축 할 수 있습니다 : if (this.parentNode === document.body);
ehynds


60

왜 안 되는가 :

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

?


1
또는if ($(this).parent().is($("body")))
2016

18

루핑이 필요하지 않으며 단일 첫 번째 노드를 테스트 할 필요가 없습니다. 길이가 같고 노드를 공유하는 것 외에는 거의 필요하지 않습니다. 다음은 작은 코드 스 니펫입니다. 자신의 용도로 이것을 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 {}
});

이것은 다음 div가 동일하다는 것을 의미하지 않습니까? <div>abc</div> <div>def</div>
Charlie Schliesser 2011 년

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

2

나는이 대답을 우연히 발견했고 어느 것이 더 나은지 궁금했다. 그것은 모두 당신의 필요에 달려 있지만 가장 쉬운 입력, 읽기 및 실행이 가장 좋습니다. 결정을 내리기 위해 만든 성능 테스트 케이스입니다.

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


나에게 가장 빠른보고를하는 Raw DOM Elements 2 :보고 된 다른 모든 브라우저에서도 동일하게 보입니다.
Kyle Hotchkiss 2012-08-28

정확히 첫 번째와 동일하지만 자바 스크립트의 기본 배열 구문 분석을 사용합니다.
Salketer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.