Was ist das Nicht-jQuery-Äquivalent von $(document).ready()
?
javascript
jquery
TIMEX
quelle
quelle
$(document).ready()
Ereignis von jQuery ohne Verwendung einer Bibliothek reproduzieren möchten, sehen Sie sich dies an: stackoverflow.com/questions/1795089/…$(document).ready()
- books.google.com/… . Es verwendet auch dieaddEvent
ereignisbindende Abstraktion von Dean Edwards, deren Code ebenfalls im Buch enthalten ist :)Antworten:
Das Schöne daran
$(document).ready()
ist, dass es vorher feuertwindow.onload
. Die Ladefunktion wartet, bis alles geladen ist, einschließlich externer Assets und Bilder.$(document).ready
Wird jedoch ausgelöst, wenn der DOM-Baum vollständig ist und bearbeitet werden kann. Wenn Sie DOM ohne jQuery erreichen möchten, können Sie in diese Bibliothek einchecken. Jemand hat nur denready
Teil aus jQuery extrahiert . Es ist schön klein und vielleicht nützlich:bereits bei Google Code
quelle
Dies funktioniert perfekt von ECMA
Das
window.onload
ist gleich nicht zu JQuery$(document).ready
weil$(document).ready
wartet nur auf den Baum DOM währendwindow.onload
alle Elemente überprüfen , einschließlich externer Vermögenswerte und Bilder.EDIT : IE8 und älteres Äquivalent hinzugefügt, dank Jan Derks Beobachtung. Sie können die Quelle dieses Codes auf MDN unter diesem Link lesen :
Neben gibt es noch andere Möglichkeiten
"interactive"
. Weitere Informationen finden Sie unter dem MDN- Link.quelle
document.addEventListener("DOMContentLoaded",function(){console.log(123)})
versuche es jetztEine kleine Sache, die ich zusammengestellt habe
domready.js
Wie man es benutzt
Sie können den Kontext, in dem der Rückruf ausgeführt wird, auch ändern, indem Sie ein zweites Argument übergeben
quelle
Jetzt, da es 2018 ist, ist hier eine schnelle und einfache Methode.
Dadurch wird ein Ereignis-Listener hinzugefügt. Wenn er jedoch bereits ausgelöst wurde, überprüfen wir, ob der Dom bereit oder vollständig ist. Dies kann ausgelöst werden, bevor oder nachdem Unterressourcen vollständig geladen wurden (Bilder, Stylesheets, Frames usw.).
Zusätzliche Lesungen
Aktualisieren
Hier sind einige schnelle Hilfsprogramme, die den von mir geschriebenen Standard-ES6-Import und -Export verwenden und auch TypeScript enthalten. Vielleicht kann ich diese zu einer schnellen Bibliothek machen, die als Abhängigkeit in Projekte installiert werden kann.
JavaScript
Typoskript
Versprechen
quelle
Laut http://youmightnotneedjquery.com/#ready ist bereits ein netter Ersatz, der noch mit IE8 funktioniert
Verbesserungen : Persönlich würde ich auch prüfen, ob der Typ
fn
eine Funktion ist. Und wie @elliottregan vorgeschlagen hat, entfernen Sie den Ereignis-Listener nach der Verwendung.Der Grund, warum ich diese Frage zu spät beantworte, ist, dass ich nach dieser Antwort gesucht habe, sie aber hier nicht finden konnte. Und ich denke, das ist die beste Lösung.
quelle
Es gibt einen standardbasierten Ersatz, DOMContentLoaded, der von über 90% der Browser unterstützt wird, jedoch nicht von IE8 (siehe unten: Code, der von JQuery für die Browserunterstützung verwendet wird) :
Die native Funktion von jQuery ist viel komplizierter als nur window.onload, wie unten dargestellt.
quelle
DOMContentLoaded
undload
Ereignisse mitaddEventListener
, und zuerst das Feuer beiden Hörer entfernen, so dass es zweimal nicht ausgelöst.In einfachem Vanille-JavaScript ohne Bibliotheken? Es ist ein Fehler.
$
ist einfach ein Bezeichner und undefiniert, sofern Sie ihn nicht definieren.jQuery definiert
$
als sein eigenes "Alles-Objekt" (auch bekannt als "jQuery
Sie können es verwenden, ohne mit anderen Bibliotheken in Konflikt zu geraten)". Wenn Sie jQuery (oder eine andere Bibliothek, die es definiert) nicht verwenden,$
wird es nicht definiert.Oder fragen Sie, was das Äquivalent in einfachem JavaScript ist? In diesem Fall möchten Sie wahrscheinlich
window.onload
, was nicht genau gleichwertig ist, aber der schnellste und einfachste Weg ist, um dem gleichen Effekt in Vanille-JavaScript nahe zu kommen.quelle
Der einfachste Weg in neueren Browsern wäre die Verwendung der entsprechenden GlobalEventHandler , onDOMContentLoaded , onload , onloadeddata (...)
Das DOMContentLoaded-Ereignis wird ausgelöst, wenn das ursprüngliche HTML-Dokument vollständig geladen und analysiert wurde, ohne darauf zu warten, dass Stylesheets, Bilder und Subframes vollständig geladen werden. Eine ganz andere Ereignislast sollte nur verwendet werden, um eine vollständig geladene Seite zu erkennen. Es ist ein unglaublich beliebter Fehler, load zu verwenden, wenn DOMContentLoaded viel angemessener wäre. Seien Sie also vorsichtig.
https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
Die verwendete Funktion ist eine IIFE, die in diesem Fall sehr nützlich ist, da sie sich selbst auslöst, wenn sie bereit ist:
https://en.wikipedia.org/wiki/Immedially-invoked_function_expression
Es ist offensichtlich angemessener, es am Ende eines Skripts zu platzieren.
In ES6 können wir es auch als Pfeilfunktion schreiben:
Am besten verwenden Sie die DOM-Elemente. Wir können warten, bis eine Variable bereit ist, die ein IIFE mit Pfeil auslöst.
Das Verhalten ist das gleiche, jedoch mit geringerer Auswirkung auf den Speicher.
In vielen Fällen wird das Dokumentobjekt auch ausgelöst, wenn es bereit ist , zumindest in meinem Browser. Die Syntax ist dann sehr schön, aber es müssen weitere Tests zur Kompatibilität durchgeführt werden.
quelle
Der Body onLoad könnte auch eine Alternative sein:
quelle