2010-08-20 19 views
5

Ich lese ein Online-Tutorial, das sagt, wenn die <script></script> ist ganz oben auf </body> die $(document).ready ist nicht notwendig b/c das Dokument wurde in diesem Moment geladen.

Q1> Stimmt das?

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> 

Was bedeutet das $ (Fenster) bedeuten? Ist das ein JQuery-Selektor? Wenn ja, dann sucht der vorherige Anspruch richtig, weil wir das nicht innerhalb

$(document).ready(function() { 

}); 

Q3 müssen enthalten>, warum wir $ Link hier benutzen? Warum wählen wir $link anstelle von var link?

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

Danke

Antwort

2

Q1. Ja und nein. Vielleicht wird jQuery noch einige Dinge tun, nachdem das erreicht wurde, aber wenn Sie nur versuchen, ein Element zu finden, das zuvor in den Körper geladen wurde, wird es funktionieren.

Q2. Es erstellt ein jQuery-Objekt, das auf das Fenster zeigt. Es ist kein jQuery Selector, weder $ (document) noch $ (document.body) - in diesen übergeben Sie einen Knoten an jQuery und nicht an einen Selector.

Q3. Es speichert es. Indem wir $link = $('nav a[hash=#first]'); durchführen, cachen wir/cache das Ergebnis $ link, als ob wir zweimal $('nav a[hash=#first]') hätten, dann müsste jQuery das Ergebnis zweimal finden - das könnte ziemlich intensiv werden/werden, wenn alle deine Aufrufe nicht zwischengespeichert werden. Sie sollten auch var $link = $('nav a[hash=#first]'); verwenden, um sicherzustellen, dass $link nicht global definiert ist - das ist schlecht (aufgrund von Variablenkonflikten).

Als eine allgemeine Praxis; alles, was DOM-Elemente verwendet, sollte nach dem Dokument bereit (um sicherzustellen, dass sie geladen haben und jQuery ist bereit, sie zu verwenden), alles, was nicht sollte (da es keine Notwendigkeit für die Wartezeit).

+0

Hallo balupton, Ich habe noch eine Frage als Q3 aufgeführt. Wenn möglich, können Sie einen Blick darauf werfen? danke – q0987

+0

Aktualisiert für Q3. – balupton

1

Q1 Art von wahr. Die Details sind in den api doc:

Während JavaScript, um das Ladeereignis sieht Ausführung von Code, wenn eine Seite gerendert wird, wird dieses Ereignis nicht ausgelöst werden, bis alle Vermögenswerte wie Bilder vollständig empfangen worden ist. ... Wenn Sie Skripts verwenden, die auf dem Wert von CSS-Stileigenschaften basieren, ist es wichtig, auf externe Stylesheets zu verweisen oder Stilelemente einzubetten, bevor Sie auf die Skripts verweisen.

Einfügen von Code direkt vor (oder nach) dem Schließkörper-Tag und nicht mit .ready() zu dem Zeitpunkt, da funktioniert in der Regel in Ordnung, den Parser des Browsers das Ende des Körpers erreicht, ist der dom vollständig genug, dass Sie können mit Selektoren usw. arbeiten.

Q2 "Fenster" ist ein object exposed by the browser; Es ist Teil des DOM, aber es ist nicht notwendig, es in einem .ready (function() {}) -Stil zu referenzieren, da HTML, das geladen wird, dieses Objekt in keiner Weise ändern wird, um sein .scroll-Ereignis zu beeinflussen.

Verwandte Themen