Soy un principiante de jQuery y mientras revisaba algunos ejemplos de código encontré:
$(document.body)
y $('body')
¿Hay alguna diferencia entre estos dos?
jquery
document
document-body
Ashleedawg
fuente
fuente
$(body)
no funciona para.on('click'...
eventos, mientras que$(document.body)
y$(document)
ambos funcionan.Respuestas:
Se refieren al mismo elemento, la diferencia es que cuando dices
document.body
que estás pasando el elemento directamente a jQuery. Alternativamente, cuando pasa la cadena'body'
, el motor de selección jQuery tiene que interpretar la cadena para averiguar a qué elemento (s) se refiere.En la práctica, cualquiera de los dos hará el trabajo.
Si está interesado, hay más información en la documentación de la función jQuery .
fuente
Las respuestas aquí no son completamente correctas. Cerca, pero hay un caso límite.
La diferencia es que $ ('body') realmente selecciona el elemento por el nombre de la etiqueta, mientras que document.body hace referencia al objeto directo en el documento.
Eso significa que si usted (o un script deshonesto) sobrescribe el elemento document.body (¡lástima!) $ ('Body') seguirá funcionando, pero $ (document.body) no. Entonces, por definición, no son equivalentes.
Me atrevería a suponer que hay otros casos extremos (como elementos identificados globalmente en IE) que también activarían lo que equivale a un elemento de cuerpo sobrescrito en el objeto del documento, y se aplicaría la misma situación.
fuente
document.body
en otra cosa que no sea<body>
: i.imgur.com/unJVwXy.pngHe encontrado una gran diferencia en el tiempo al probar en mi navegador.
Usé el siguiente script:
Hice 10 millones de interacciones, y esos fueron los resultados (Chrome 65):
Pasar el elemento directamente es 4 veces más rápido que pasar el selector.
fuente
$(document.body)
está usando la referencia globaldocument
para obtener una referencia abody
, mientras que$('body')
es un selector en el que jQuery obtendrá la referencia al<body>
elemento endocument
.No puedo ver ninguna diferencia importante, ni una ganancia de rendimiento notable de uno a otro.
fuente
$(document.body)
es considerablemente más rápido según este artículo: sitepoint.com/jquery-body-on-document-onNo debería haber ninguna diferencia en absoluto, tal vez el primero sea un poco más eficaz, pero creo que es trivial (no deberías preocuparte por esto, de verdad).
Con ambos, envuelve la
<body>
etiqueta en un objeto jQueryfuente
Outputwise ambos son equivalentes. Aunque la segunda expresión pasa por una búsqueda de arriba hacia abajo desde la raíz DOM. Es posible que desee evitar la sobrecarga adicional (por minúscula que sea) si ya tiene el objeto document.body en la mano para que JQuery lo envuelva. Ver http://api.jquery.com/jQuery/ #Selector Context
fuente