2012-09-06 15 views
72

Soy un principiante de JQuery y mientras voy por algunos ejemplos en algunos códigos encontrados.

$(document.body) y $('body')

Podría alguien decirme ¿hay alguna diferencia entre estos dos?

+1

Uno es más rápido, sin embargo, teniendo en cuenta que nunca se llamará más de unas pocas veces en una sola página, la diferencia entre los dos es * muy * pequeño. –

+0

'$ (cuerpo)' no funciona para '.on ('clic' ...' eventos, mientras que '$ (document.body)' y '$ (document)' ambos funcionan. – rybo111

+3

La declaración anterior es falsa y también hay una pequeña diferencia en el rendimiento, aproximadamente 10% a favor de $ (document.body). Puede ver la comparación aquí https://www.sitepoint.com/jquery-body-on-document-on/ – Sigismund

Respuesta

5

No debería haber ninguna diferencia tal vez la primera es un poco más eficiente pero creo que es trivial (no debes preocuparte por esto, realmente).

Con tanto que se coloca la etiqueta <body> en un objeto jQuery

7

$(document.body) está utilizando la referencia mundial document para obtener una referencia a la body, mientras que $('body') es un selector en el que jQuery obtener la referencia al elemento <body> en el document.

No hay una gran diferencia que pueda ver, ni una ganancia notable en el rendimiento de una a la otra.

+4

'$ (document.body) 'es considerablemente más rápido según este artículo: https: //www.sitepoint.com/jquery-body-on-document-on/ –

53

Se refieren al mismo elemento, la diferencia es que cuando dice document.body está pasando el elemento directamente a jQuery. Alternativamente, cuando pasa la cadena 'body', el jQuery selector engine tiene que interpretar la cadena para averiguar a qué elemento (s) se refiere.

En la práctica, cualquiera hará el trabajo.

Si le interesa, hay más información en la documentación del jQuery function.

+0

La primera declaración no es completamente correcta. * Pueden * referirse al mismo elemento. Por lo general, incluso. Pero no siempre :). Ver mi respuesta a continuación. – jvenema

3

Outputwise 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 (aunque sea minúscula) si ya tiene el objeto document.body a mano para que JQuery lo complete. Ver http://api.jquery.com/jQuery/ #Selector Context

6

Las respuestas aquí no son realmente completamente correcto. Cerca, pero hay una caja de borde.

La diferencia es que $ ('cuerpo') 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 guión deshonesto) sobrescribe el elemento document.body (¡vergüenza!) $ ('Body') seguirá funcionando, pero $ (document.body) no lo hará. Entonces, por definición, no son equivalentes.

Me atrevería a adivinar que hay otros casos extremos (como elementos con id global en IE) que también dispararían lo que equivale a un elemento del cuerpo sobreescrito en el objeto del documento, y se aplicaría la misma situación.