Sollte ich DOM-fähige Funktionen verwenden, wenn sich meine Skripte am Ende des Körpers befinden?

8

Ich weiß, dass wir in jQuery $(document).ready() verwenden sollen, um sicherzustellen, dass die DOM-Elemente für die Interaktion bereit sind. Ich weiß, dass dies definitiv gilt, wenn sich die Script-Tags in <head> befinden. Wenn sie nach allen DOM-Elementen am Ende von <body> stehen, sollte ich noch eine DOM-ready-Funktion verwenden? Gibt es Browser, in denen mein Code fehlschlagen würde, wenn ich nicht?

Danke!

    
Matchu 03.01.2010, 03:44
quelle

4 Antworten

13

Es gibt eine Sache, die Sie in einem <script> -Block vor </body> nicht tun können: Hängen Sie den DOM-Inhalt an den Body an. Dies ist das Problem mit dem Append-Related-to-Pars-Verfahren, das dazu führt, dass IE eine Anpassung mit der gefürchteten "Operation abgebrochen" auslöst.

Wenn Sie also Skripte oder Plugins haben, die das tun, können Sie sie nicht am Ende des body-Elements inline aufrufen. Sonst mach weiter.

Es wird Ihnen nichts über aktuelle Mozilla-, Opera- oder WebKit-Browser bringen, da diese in jedem Moment ready auslösen. Es wird eine unangenehme aber weitgehend harmlose Hack-Schleife in IE vermeiden, und es wird viel früher für andere (ältere oder obskurer) Browser ausgelöst, die sonst auf onload warten.

    
bobince 03.01.2010, 04:01
quelle
1

Es gibt noch einen anderen Grund, Ihre Skripte an das Ende zu setzen: Browser laden nicht JS-Dateien parallel, weil sie alles beeinflussen können, was danach kommt. Tatsächlich hält alles im Browser an, bis die JS-Datei heruntergeladen und analysiert wurde - Text, Bilder, alles. Wenn Sie sie also nicht früher laden müssen, laden Sie JS am Ende der Seite.

    
Peter Rowell 03.01.2010 04:00
quelle
0

Die DOM-ready-Funktion stellt sicher, dass das gesamte DOM tatsächlich erstellt wurde, damit alle Elemente im Dokument erreicht werden können. Das normale window.onload wird nur geladen, wenn alle Bilder geladen wurden, während das jQuery-Ereignis ausgelöst wird, sobald die Dokumentstruktur existiert. Wenn Sie etwas brauchen, "wenn das Dokument geladen wird", gibt es keinen Grund, irgendetwas außer $(document).ready() zu verwenden.

    
Christian P. 03.01.2010 03:52
quelle
0

Ich habe noch nie einen Browser gefunden, bei dem Sie nicht auf das DOM von html-Elementen zugreifen konnten, das vor meinem Skript erschien.

Das heißt, wenn Sie jQuery oder so bereits einbinden, würde ich wahrscheinlich die ready () -Methode verwenden, nur um es anderen Leuten, die mit jQuery vertraut sind, zu erleichtern, den Code zu verstehen.

Gibt es einen Grund, warum Sie das vermeiden möchten?

(Wenn Sie nach einer Möglichkeit suchen, das Laden von jQuery zu vermeiden, dann können Sie nach meiner Erfahrung immer auf das DOM der Elemente zugreifen, die vor dem Skript erscheinen.)

    
Roland Bouman 03.01.2010 03:52
quelle

Tags und Links