Ich bin ein jQuery-Anfänger und habe beim Durchgehen einiger Codebeispiele Folgendes gefunden:
$(document.body)
und $('body')
Gibt es einen Unterschied zwischen diesen beiden?
jquery
document
document-body
ashleedawg
quelle
quelle
$(body)
funktioniert nicht für.on('click'...
Events, während$(document.body)
und$(document)
beide funktionieren.Antworten:
Sie beziehen sich auf dasselbe Element. Der Unterschied besteht darin, dass Sie
document.body
das Element direkt an jQuery übergeben , wenn Sie sagen, dass Sie es übergeben. Wenn Sie die Zeichenfolge übergeben'body'
, muss die jQuery-Auswahlmaschine die Zeichenfolge alternativ interpretieren, um herauszufinden, auf welche Elemente sie sich bezieht.In der Praxis wird entweder die Arbeit erledigt.
Wenn Sie interessiert sind, finden Sie weitere Informationen in der Dokumentation zur jQuery-Funktion .
quelle
Die Antworten hier sind eigentlich nicht ganz richtig. Schließen, aber es gibt einen Randfall.
Der Unterschied besteht darin, dass $ ('body') das Element tatsächlich anhand des Tag-Namens auswählt, während document.body auf das direkte Objekt im Dokument verweist.
Das heißt, wenn Sie (oder ein Schurkenskript) das document.body-Element überschreiben (schade!), Funktioniert $ ('body') weiterhin, $ (document.body) jedoch nicht. Per Definition sind sie also nicht gleichwertig.
Ich wage zu vermuten, dass es andere Randfälle gibt (z. B. global identifizierte Elemente im IE), die ebenfalls auslösen, was einem überschriebenen Body-Element im Dokumentobjekt entspricht, und die gleiche Situation würde gelten.
quelle
document.body
auf etwas anderes als a zu setzen<body>
: i.imgur.com/unJVwXy.pngIch habe beim Testen in meinem Browser einen ziemlich großen Unterschied im Timing festgestellt.
Ich habe das folgende Skript verwendet:
Ich habe 10 Millionen Interaktionen durchgeführt, und das waren die Ergebnisse (Chrome 65):
Das direkte Übergeben des Elements ist etwa viermal schneller als das Übergeben des Selektors.
quelle
$(document.body)
verwendet die globale Referenzdocument
, um eine Referenz auf die zu erhaltenbody
, während dies$('body')
ein Selektor ist, in dem jQuery die Referenz auf das<body>
Element auf der erhältdocument
.Kein wesentlicher Unterschied, den ich sehen kann, kein merklicher Leistungsgewinn von einem zum anderen.
quelle
$(document.body)
ist laut diesem Artikel messbar schneller: sitepoint.com/jquery-body-on-document-onEs sollte überhaupt keinen Unterschied geben, vielleicht ist der erste etwas performanter, aber ich denke, es ist trivial (darüber sollten Sie sich eigentlich keine Sorgen machen).
Mit beiden verpacken Sie das
<body>
Tag in ein jQuery-Objektquelle
In der Ausgabe sind beide gleichwertig. Der zweite Ausdruck durchläuft jedoch eine Top-Down-Suche im DOM-Stammverzeichnis. Möglicherweise möchten Sie den zusätzlichen Aufwand vermeiden (wie winzig er auch sein mag), wenn Sie bereits ein document.body-Objekt zur Hand haben, das JQuery umbrechen kann. Siehe http://api.jquery.com/jQuery/ #Selector Context
quelle