programing

$(문서.본문)과 $('본문')의 차이

newnotes 2023. 9. 7. 22:03
반응형

$(문서.본문)과 $('본문')의 차이

저는 jQuery 초보자인데 몇가지 코드 예시를 살펴보다가 다음을 발견했습니다.

$(document.body)그리고.$('body')

이 둘 사이에 다른 점이 있습니까?

그들은 같은 요소를 언급합니다. 차이점은 당신이 말할 때document.body요소를 jQuery에 직접 전달합니다.또는 문자열을 전달할 때'body', jQuery selector 엔진은 문자열을 해석하여 참조하는 요소를 파악해야 합니다.

실제로는 둘 중 하나가 일을 끝낼 것입니다.

관심이 있으시다면 jQuery 기능에 대한 자세한 내용이 설명서에 나와 있습니다.

여기 있는 답들은 사실 완전히 정확하지는 않습니다.가깝긴 한데, 가장자리 케이스가 있네요.

다른 점은 $'body'는 실제로 태그 이름으로 요소를 선택하는 반면, 문서라는 점입니다.본문은 문서의 직접 개체를 참조합니다.

즉, 사용자(또는 악성 스크립트)가 문서를 덮어쓰는 경우를 의미합니다.body element (body!) $('body')는 계속 작동하지만 $(body.body)는 작동하지 않습니다.그래서 정의상 그들은 동등하지 않습니다.

문서 개체에 덮어쓰기된 본문 요소를 트리거하는 다른 에지 케이스(IE의 전역적으로 식별된 요소 등)가 있다고 추측해 보겠습니다. 그리고 같은 상황이 적용됩니다.

브라우저에서 테스트할 때 타이밍 차이가 꽤 많이 나는 것을 발견했습니다.

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

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

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 개체에 태그를 지정합니다.

출력 기준으로 둘 다 동등합니다.두 번째 표현식은 DOM 루트에서 하향식 조회를 거칩니다.문서가 이미 있는 경우 추가 오버헤드를 피할 수도 있습니다.JQuery가 감싸기 위해 손에 든 본문 오브젝트.http://api.jquery.com/jQuery/ #Selector Context 참조

오늘은 https://developer.chrome.com/docs/extensions/mv3/getstarted/ 에서 크롬 확장 예제를 만들기 위해 노력하는 중입니다.

바꾸려고 했습니다.

document.body.style.backgroundColor = color;

와 함께

$("body").css("background-color", "black");

물론 HTML 파일에 이것을 추가했다고 말해야 합니다.

<script src="script/jquery-3.6.0.min.js"></script>

결과적으로 그것은 작동하지 않습니다.확장명의 목적인 페이지의 배경색은 변경되지 않습니다.

하지만 jQuery는 여전히 확장 팝업에서 요소를 변경/조작할 수 있습니다.

  • $(document)문서에 한다만에다만한ye에s.
  • $('body')본문과 문서에 대한 언급.

이 작업을 수행할 때:

$('body').on('log', () => {
    console.log('log body');
});

$(document).on('log', () => {
    console.log('log document');
});

$('body').trigger('log'); => log body + log document

$(document).trigger('log'); => only log document

결과:

console log output

언급URL : https://stackoverflow.com/questions/12307112/difference-between-document-body-and-body

반응형