[jquery] $ (document.body)와 $ ( ‘body’)의 차이점

저는 jQuery 초보자이며 몇 가지 코드 예제를 살펴보면서 발견했습니다.

$(document.body)$('body')

이 둘 사이에 차이점이 있습니까?



답변

그들은 동일한 요소를 참조하지만 차이점은 document.body요소를 jQuery에 직접 전달한다는 것입니다. 당신이 문자열을 전달하는 경우 또는 'body'jQuery를 선택 엔진 은을 참조 어떤 요소 (들) 파악하는 문자열을 해석 할 수있다.

실제로 둘 중 하나가 작업을 완료합니다.

관심이있는 경우 jQuery 함수 에 대한 문서에 더 많은 정보가 있습니다 .


답변

여기의 답변은 실제로 완전히 정확 하지 않습니다 . 닫았지만 엣지 케이스가 있습니다.

차이점은 $ ( ‘body’)는 실제로 태그 이름으로 요소를 선택하는 반면 document.body는 문서의 직접 객체를 참조한다는 것입니다.

즉, 사용자 (또는 불량 스크립트)가 document.body 요소 (부끄러움!)를 덮어 쓰면 $ ( ‘body’)는 계속 작동하지만 $ (document.body)는 작동하지 않습니다. 따라서 정의에 따라 동등하지 않습니다.

문서 개체에서 덮어 쓴 본문 요소의 양을 트리거하는 다른 경우 (예 : IE의 전역 적으로 id’ed 요소)가 있다고 추측하고 동일한 상황이 적용될 것입니다.


답변

내 브라우저에서 테스트 할 때 타이밍에서 꽤 큰 차이를 발견했습니다.

다음 스크립트를 사용했습니다.

경고 : 이것을 실행하면 브라우저가 약간 정지되고 충돌 할 수도 있습니다.

var n = 10000000, i;
i = n;
console.time('selector');
while (i --> 0){
    $("body");
}

console.timeEnd('selector');

i = n;
console.time('element');
while (i --> 0){
    $(document.body);
}

console.timeEnd('element');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

나는 천만 번의 상호 작용을 수행했고 그 결과는 다음과 같습니다 (Chrome 65).

선택기 : 19591.97509765625ms
요소 : 4947.8759765625ms

요소를 직접 전달하는 것이 선택자를 전달하는 것보다 약 4 배 빠릅니다.


답변

$(document.body)전역 참조를 사용 document받는 기준을 얻는 body반면 것은 $('body')jQuery를이 기준에 얻을하는 셀렉터이다 <body>상의 소자 document.

내가 볼 수있는 큰 차이는 없으며, 하나에서 다른 것으로 눈에 띄는 성능 향상도 없습니다.


답변

전혀 차이가 없어야합니다. 아마도 첫 번째가 조금 더 성능이 좋을 수도 있지만 사소하다고 생각합니다 (진짜 걱정할 필요가 없습니다).

둘 다 <body>jQuery 객체에 태그 를 래핑 합니다.


답변

Outputwise 둘 다 동등합니다. 두 번째 표현식은 DOM 루트에서 하향식 조회를 거칩니다. JQuery가 래핑 할 수있는 document.body 객체가 이미있는 경우 추가 오버 헤드를 피하고 싶을 수 있습니다. http://api.jquery.com/jQuery/ #Selector Context 참조


답변