Gute Frage.
Es gibt einige Verwirrung um den gesamten Ratschlag "Skripte am Ende Ihrer Seite einfügen" und welche Probleme er zu lösen versucht. Bei dieser Frage werde ich nicht darüber sprechen, ob das Einfügen von Skripten am Ende der Seite die Leistung / Ladezeiten beeinflusst oder nicht. Ich werde nur darüber sprechen, ob Sie es brauchen, $(document).ready
wenn Sie auch Skripte am Ende der Seite einfügen .
Ich gehe davon aus, dass Sie das DOM in den Funktionen referenzieren, die Sie sofort in Ihren Skripten aufrufen (alles so einfach wie document
oder document.getElementById
). Ich gehe auch davon aus, dass Sie nur nach diesen [DOM-referenzierenden] Dateien fragen. IOW, Bibliotheksskripte oder Skripte, die Ihr DOM-Referenzierungscode benötigt (wie jQuery), müssen früher auf der Seite platziert werden.
Um Ihre Frage zu beantworten : Wenn Sie Ihre DOM-Referenzierungsskripte am Ende der Seite einfügen, Nein, brauchen Sie nicht $(document).ready
.
Erläuterung : Ohne die Hilfe "onload"
verwandter Implementierungen wie $(document).ready
der Faustregel lautet: Jeder Code, der mit DOM-Elementen auf der Seite interagiert, sollte weiter unten auf der Seite platziert / eingefügt werden als die Elemente, auf die er verweist. Am einfachsten ist es, diesen Code vor dem Schließen zu platzieren </body>
. Sehen Sie hier und hier . Es funktioniert auch um den gefürchteten Fehler "Operation abgebrochen" des IE .
Dies macht jedoch die Verwendung von keineswegs ungültig $(document).ready
. Das Referenzieren eines Objekts vor dem Laden ist einer der häufigsten Fehler, die beim Starten in DOM-JavaScript gemacht wurden (es wurde zu oft beobachtet, um es zu zählen). Es ist die Lösung von jQuery für das Problem, und Sie müssen nicht darüber nachdenken, wo dieses Skript in Bezug auf die DOM-Elemente, auf die es verweist, enthalten sein wird. Dies ist ein großer Gewinn für Entwickler. Es ist nur eine Sache weniger, über die sie nachdenken müssen.
Außerdem ist es oft schwierig oder unpraktisch, alle DOM-referenzierenden Skripte an den unteren Rand der Seite zu verschieben (z. B. muss jedes Skript, das document.write
Aufrufe ausgibt , stehen bleiben). In anderen Fällen verwenden Sie ein Framework, das eine Vorlage rendert oder dynamisches Javascript erstellt, in dem auf Funktionen verwiesen wird, die vor dem js eingefügt werden müssen.
Schließlich war es früher "Best Practice", den gesamten DOM-referenzierenden Code zu blockieren window.onload
, wurde jedoch aus Gründen, die gut dokumentiert sind, durch $(document).ready
Implementierungen in den Schatten gestellt .
All dies führt zu $(document).ready
einer weit überlegenen, praktischen und allgemeinen Lösung des Problems, DOM-Elemente zu früh zu referenzieren.