Jestem początkującym jQuery i przeglądając kilka przykładów kodu, które znalazłem:
$(document.body)
i $('body')
Czy jest jakaś różnica między tymi dwoma?
jquery
document
document-body
ashleedawg
źródło
źródło
$(body)
nie działa na.on('click'...
wydarzenia, podczas gdy$(document.body)
i$(document)
oba działają.Odpowiedzi:
Odnoszą się do tego samego elementu, różnica polega na tym, że kiedy mówisz,
document.body
że przekazujesz element bezpośrednio do jQuery. Alternatywnie, gdy przekazujesz ciąg'body'
, silnik selektora jQuery musi zinterpretować ciąg, aby dowiedzieć się, do jakich elementów się odwołuje.W praktyce albo wykonają swoją pracę.
Jeśli jesteś zainteresowany, więcej informacji znajdziesz w dokumentacji funkcji jQuery .
źródło
Odpowiedzi tutaj nie są w rzeczywistości całkowicie poprawne. Blisko, ale jest skrajna sprawa.
Różnica polega na tym, że $ ('body') faktycznie wybiera element na podstawie nazwy znacznika, podczas gdy document.body odwołuje się do obiektu bezpośredniego w dokumencie.
Oznacza to, że jeśli Ty (lub nieuczciwy skrypt) nadpiszesz element document.body (szkoda!) $ ('Body') nadal będzie działać, ale $ (document.body) nie. Więc z definicji nie są równoważne.
Zaryzykowałbym zgadywanie, że istnieją inne przypadki skrajne (takie jak globalnie identyfikowane elementy w IE), które również wyzwalałyby to, co oznacza nadpisany element ciała na obiekcie dokumentu i taka sama sytuacja miałaby zastosowanie.
źródło
document.body
czegoś innego niż<body>
: i.imgur.com/unJVwXy.pngPodczas testowania w przeglądarce zauważyłem dość dużą różnicę w czasie.
Użyłem następującego skryptu:
Zrobiłem 10 milionów interakcji i takie były wyniki (Chrome 65):
Bezpośrednie przejście elementu jest około 4 razy szybsze niż przejście selektora.
źródło
$(document.body)
używa globalnego odniesienia,document
aby uzyskać odwołanie do elementubody
, podczas gdy$('body')
jest selektorem, w którym jQuery pobierze odwołanie do<body>
elementu wdocument
.Żadnej większej różnicy, którą widzę, ani żadnego zauważalnego wzrostu wydajności między nimi.
źródło
$(document.body)
jest mierzalnie szybszy zgodnie z tym artykułem: sitepoint.com/jquery-body-on-document-onNie powinno być żadnej różnicy, może pierwsza jest trochę bardziej wydajna, ale myślę, że jest trywialna (naprawdę nie powinieneś się tym martwić).
W obu przypadkach zawijasz
<body>
tag w obiekt jQueryźródło
Wyjściowo oba są równoważne. Chociaż drugie wyrażenie przechodzi przez wyszukiwanie z góry na dół z katalogu głównego DOM. Możesz chcieć uniknąć dodatkowego narzutu (nawet najmniejszego), jeśli masz już obiekt document.body w ręku, aby JQuery mógł go zawinąć. Zobacz http://api.jquery.com/jQuery/ #Selector Context
źródło