2010-01-03 23 views
8

Sé que, en jQuery, se nos dice que usemos $(document).ready() para asegurarnos de que los elementos DOM estén listos para la interacción. Sé que esto definitivamente se aplica si las etiquetas de script están en el <head>. Si se encuentran al final de <body>, después de todos los elementos DOM, ¿debería seguir usando una función DOM-ready? ¿Hay navegadores en los que mi código fallaría si no lo hiciera?¿Debo usar las funciones listas para DOM si mis scripts están al final del cuerpo?

Gracias!

Respuesta

13

Hay una cosa que no se puede hacer en un bloque <script> justo antes de : añada contenido DOM al cuerpo. Este es el problema de apéndice relativo al análisis que hace que el IE arroje un ajuste con la temida "Operación abortada".

Así que si tiene scripts o complementos que hacen eso, no puede invocarlos en línea al final del elemento de cuerpo. De lo contrario, adelante.

No obtendrá nada en navegadores actualizados de Mozilla, Opera o WebKit, ya que dispararán ready en un momento de todos modos. Evitará un ciclo de hack desagradable pero en gran medida inofensivo en IE, y se disparará mucho más rápido para otros navegadores (antiguos o más oscuros) que de lo contrario recurren a la espera de onload.

+1

+1 ¡Pásame, todos son buenos puntos! –

+0

Es bueno saberlo - ¡gracias! – Matchu

+3

No, IE permite la manipulación del elemento primario contenedor del elemento '

0

La función DOM-ready asegura que todo el DOM se haya creado realmente para que todos los elementos en el documento puedan ser alcanzados. El window.onload normal se carga solo cuando se han cargado todas las imágenes, mientras que el evento de jQuery se dispara tan pronto como existe la estructura del documento. Si necesita que algo suceda "justo cuando se carga el documento", no hay ninguna razón para usar nada más que $(document).ready().

+0

Así que mi pregunta es, ¿está el documento suficientemente cargado para el momento en que se ejecutan mis scripts? – Matchu

0

Nunca me encontré con un navegador donde no se podía acceder al DOM de los elementos html que aparecían antes de mi script.

Dicho esto, si está utilizando jQuery o algo similar, probablemente use el método ready(), solo para que otras personas acostumbradas a jQuery entiendan el código.

¿Hay alguna razón por la que desea evitar esto?

(si usted está buscando una manera de evitar cargar jQuery, entonces, bueno, sí, en mi experiencia, siempre se puede acceder al DOM de los elementos que aparecen antes de la secuencia de comandos.)

+0

Ya estoy usando jQuery para el acceso general a DOM, pero mi script está organizado de tal manera que, para modularizar correctamente ciertas acciones listas para DOM, terminan en diferentes partes del código. Se vería más limpio si pudiera eliminar $ (function() {}), pero no estoy dispuesto a hacerlo hasta que esté seguro de que eliminarlo no puede dañar nada. – Matchu

1

hay otra razón para poner sus scripts al final: los navegadores hacen no cargan archivos JS en paralelo porque pueden afectar todo lo que viene después. De hecho, todo se detiene en el navegador hasta que el archivo JS se descarga y se analiza: texto, imágenes, todo. Por lo tanto, a menos que tenga que cargarlo antes de, cargue su JS al final de la página.

+3

En realidad, la mayoría de los navegadores modernos pueden cargar scripts en paralelo; consulte el gráfico en http://www.browserscope.org/?v=top&category=network Sin embargo, la carga paralela no resuelve el problema. Otro problema es que usted mencionó que los navegadores deje de analizar y renderizar hasta que los scripts se hayan cargado y ejecutado, por lo que poner scripts en la parte inferior sigue siendo un buen consejo. – Annie

+0

@Annie: gracias por el enlace.No me había dado cuenta de que habían solucionado el problema de descarga de scripts paralelos en FF 3.5 y MSIE 8. Es interesante observar que ambos descargarán script/script y script/stylesheet en paralelo, pero no script/image. ¿Alguna idea de por qué podría ser? –

Cuestiones relacionadas