2010-08-20 19 views
5

Estoy leyendo un tutorial en línea que dice que si el <script></script> está justo en la parte superior de </body> no es necesario el $(document).ready b/c el documento se ha cargado en ese momento.

Q1> ¿Es cierto?

Q2>

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script> 
<script src="jquery.viewport.min.js"></script> 

<script> 
$(window).scroll(function() { // this line will track all mouse scroll event 

}); 
</script> 

¿Qué significa el $ (ventana)? ¿Es esto un selector de jquery? Si es así, entonces la afirmación anterior es correcta, ya que no tenemos que incluir esto dentro

$(document).ready(function() { 

}); 

Q3> por qué usamos $ enlace aquí? ¿Por qué elegimos usar $link en lugar de var link?

<script> 
$(window).scroll(function() { 
    $link = $('nav a[hash=#first]'); 
    $link.addClass('selected'); 
}); 
</script> 

Gracias

Respuesta

2

Q1. Si y no. Quizás jQuery aún haga algunas cosas después de que se haya alcanzado, pero si solo está tratando de encontrar un elemento que se haya cargado previamente en el cuerpo, funcionará.

Q2. Crea un Objeto jQuery apuntando a la ventana. No es un Selector jQuery, ni $ (documento) ni $ (document.body) - en estos está pasando un nodo a jQuery y no a un Selector.

Q3. Lo almacena en caché. Mediante la realización de $link = $('nav a[hash=#first]'); que cache/asignar el resultado a $ enlace, como si lo hicimos $('nav a[hash=#first]') dos veces, luego jQuery tendría que encontrar ese resultado dos veces - esto podría llegar a ser/será bastante intensivo, si no se almacenan en caché todas sus llamadas. También debe utilizar var $link = $('nav a[hash=#first]');, para asegurarse de que $link no esté definido globalmente, ya que eso es malo (debido a conflictos de variables).

Como práctica general; cualquier cosa que use elementos DOM debe estar después de que el documento esté listo (para asegurarse de que se hayan cargado y jQuery esté listo para usarlos), cualquier cosa que no deba (ya que no hay necesidad de esperar).

+0

Hola balupton, Tengo una pregunta más como Q3. Si es posible, ¿puedes echarle un vistazo? gracias – q0987

+0

Actualizado para Q3. – balupton

1

Q1 Una especie de verdad. Los detalles están en la api doc:

Mientras JavaScript proporciona el evento de carga para ejecutar código cuando se procesa una página, este evento no se disparará hasta que todos los activos, como las imágenes han sido completamente recibida. ... Al usar scripts que se basan en el valor de las propiedades de estilo CSS, es importante hacer referencia a las hojas de estilo externas o incrustar elementos de estilo antes de hacer referencia a los scripts.

Inserción de código justo antes (o después) de la etiqueta del cuerpo de cierre y no usando ready() normalmente funciona bien porque en el momento analizador del navegador alcanza el extremo del cuerpo, el DOM es suficiente que completa puede comenzar a trabajar con selectores, etc.

Q2 "ventana" es un object exposed by the browser; es parte del DOM, pero no hay necesidad de referenciarlo en un estilo .ready (function() {}) porque el HTML que se está cargando no cambiará ese objeto de ninguna manera para afectar su evento .scroll.