Je suis un débutant jQuery et en parcourant quelques exemples de code, j'ai trouvé:
$(document.body)
et $('body')
Y a-t-il une différence entre ces deux?
jquery
document
document-body
ashleedawg
la source
la source
$(body)
ne fonctionne pas pour les.on('click'...
événements, alors que$(document.body)
et les$(document)
deux fonctionnent.Réponses:
Ils font référence au même élément, la différence est que lorsque vous dites que vous
document.body
passez l'élément directement à jQuery. Alternativement, lorsque vous passez la chaîne'body'
, le moteur de sélection jQuery doit interpréter la chaîne pour déterminer à quel (s) élément (s) il fait référence.Dans la pratique, l'un ou l'autre fera le travail.
Si vous êtes intéressé, vous trouverez plus d'informations dans la documentation de la fonction jQuery .
la source
Les réponses ici ne sont pas vraiment tout à fait correctes. Proche, mais il y a un cas limite.
La différence est que $ ('body') sélectionne réellement l'élément par le nom de la balise, alors que document.body fait référence à l'objet direct sur le document.
Cela signifie que si vous (ou un script non autorisé) écrasez l'élément document.body (honte!) $ ('Body') fonctionnera toujours, mais $ (document.body) ne fonctionnera pas. Donc, par définition, ils ne sont pas équivalents.
Je me risquerais à penser qu'il existe d'autres cas extrêmes (tels que les éléments globalement identifiés dans IE) qui déclencheraient également ce qui équivaut à un élément de corps écrasé sur l'objet document, et la même situation s'appliquerait.
la source
document.body
autre chose que a<body>
: i.imgur.com/unJVwXy.pngJ'ai trouvé une assez grande différence de timing lors des tests dans mon navigateur.
J'ai utilisé le script suivant:
J'ai fait 10 millions d'interactions, et voici les résultats (Chrome 65):
Passer l'élément directement est environ 4 fois plus rapide que passer le sélecteur.
la source
$(document.body)
utilise la référence globaledocument
pour obtenir une référence aubody
, alors qu'il$('body')
s'agit d'un sélecteur dans lequel jQuery obtiendra la référence à l'<body>
élément sur ledocument
.Aucune différence majeure que je peux voir, pas de gain de performance notable de l'un à l'autre.
la source
$(document.body)
est nettement plus rapide selon cet article: sitepoint.com/jquery-body-on-document-onIl ne devrait y avoir aucune différence, peut-être que le premier est un peu plus performant mais je pense que c'est trivial (vous ne devriez pas vous en soucier, vraiment).
Avec les deux, vous enveloppez la
<body>
balise dans un objet jQueryla source
En sortie, les deux sont équivalents. Bien que la deuxième expression passe par une recherche de haut en bas à partir de la racine DOM. Vous voudrez peut-être éviter la surcharge supplémentaire (aussi minuscule soit-elle) si vous avez déjà l'objet document.body en main pour que JQuery se termine. Voir http://api.jquery.com/jQuery/ #Selector Context
la source