Ich habe ein Skript, das verwendet $(document).ready
, aber es verwendet nichts anderes von jQuery. Ich möchte es aufhellen, indem ich die jQuery-Abhängigkeit entferne.
Wie kann ich meine eigenen $(document).ready
Funktionen implementieren, ohne jQuery zu verwenden? Ich weiß, dass die Verwendung window.onload
nicht mit window.onload
Bränden identisch ist, nachdem alle Bilder, Frames usw. geladen wurden.
javascript
jquery
FlySwat
quelle
quelle
$(document).ready
, können Sie dieses Problem leicht lösen , wenn Sie von jQuery alles wollen , indem Sie Ihren Code ganz unten auf der Seite anstatt oben ausführen. HTML5Boilerplate verwendet genau diesen Ansatz.Antworten:
Es gibt einen standardbasierten Ersatz,
DOMContentLoaded
der von über 98% der Browser unterstützt wird , jedoch nicht von IE8:Die native Funktion von jQuery ist viel komplizierter als nur window.onload, wie unten dargestellt.
quelle
Bearbeiten:
Hier ist ein praktikabler Ersatz für jQuery bereit
Entnommen aus https://plainjs.com/javascript/events/running-code-when-the-document-is-ready-15/
Eine weitere gute domReady-Funktion stammt von https://stackoverflow.com/a/9899701/175071
Da die akzeptierte Antwort bei weitem nicht vollständig war, habe ich eine "Bereit" -Funktion wie auf der
jQuery.ready()
Basis von jQuery 1.6.2 zusammengefügt:Wie benutzt man:
Ich bin nicht sicher, wie funktional dieser Code ist, aber er hat bei meinen oberflächlichen Tests gut funktioniert. Das hat eine ganze Weile gedauert, also hoffe ich, dass Sie und andere davon profitieren können.
PS.: Ich schlage vor , es zu kompilieren .
Oder Sie können http://dustindiaz.com/smallest-domready-ever verwenden :
oder die native Funktion, wenn Sie nur die neuen Browser unterstützen müssen (Im Gegensatz zu jQuery ready wird diese nicht ausgeführt, wenn Sie diese nach dem Laden der Seite hinzufügen).
quelle
Drei Optionen:
script
es sich um das letzte Tag des Körpers handelt, ist das DOM bereit, bevor das Skript-Tag ausgeführt wirdonreadystatechange
Quelle: MDN
DOMContentLoaded
Besorgt über steinzeitliche Browser: Gehen Sie zum jQuery-Quellcode und verwenden Sie die
ready
Funktion. In diesem Fall analysieren und führen Sie nicht die gesamte Bibliothek aus, sondern nur einen sehr kleinen Teil davon.quelle
Platzieren Sie Ihr
<script>/*JavaScript code*/</script>
Recht vor dem schließenden</body>
Tag.Zugegeben, dies ist möglicherweise nicht für alle Zwecke geeignet, da die HTML-Datei geändert werden muss, anstatt nur etwas in der JavaScript-Datei a la zu tun
document.ready
, aber dennoch ...quelle
</html>
Tag einfügen?html
Tag nurhead
und enthalten , wenn Sie möchten, dass es ein gültiges HTML istbody
.Die Lösung des armen Mannes:
Geige anzeigen
Fügte dieses hinzu, ein bisschen besser, denke ich, eigener Umfang und nicht rekursiv
Geige anzeigen
quelle
setInterval
und entfernen Sie die Rekursion vollständig.Ich benutze das:
Hinweis: Dies funktioniert wahrscheinlich nur mit neueren Browsern, insbesondere diesen: http://caniuse.com/#feat=domcontentloaded
quelle
Wenn Sie sich nur für Internet Explorer 9+ interessieren , würde dieser Code ausreichen, um Folgendes zu ersetzen
jQuery.ready
:Wenn Sie sich über Internet Explorer 6 und einige wirklich seltsame und seltene Browser Sorgen machen , funktioniert dies:
quelle
Diese Frage wurde vor langer Zeit gestellt. Für alle, die diese Frage nur sehen, gibt es jetzt eine Site mit dem Namen "Sie benötigen möglicherweise keine JQuery", die - je nach erforderlicher IE-Unterstützung - alle Funktionen von JQuery aufschlüsselt und einige alternative, kleinere Bibliotheken bereitstellt.
IE8-Dokument bereit Skript nach Sie benötigen möglicherweise keine Abfrage
quelle
'onreadystatechange'
eher notwendig ist alsdocument.attachEvent('onload', fn);
Ich habe dies kürzlich für eine mobile Website verwendet. Dies ist John Resigs vereinfachte Version von "Pro JavaScript Techniques". Es hängt von addEvent ab.
quelle
Browserübergreifend (auch alte Browser) und eine einfache Lösung:
Alarm in jsfiddle anzeigen
quelle
Die jQuery-Antwort war für mich ziemlich nützlich. Mit ein wenig Raffinesse passte es gut zu meinen Bedürfnissen. Ich hoffe es hilft jemand anderem.
quelle
removeListener
Dokument als Kontext aufgerufen werden, d. h.removeListener.call(document, ...
Hier ist das kleinste Code-Snippet zum Testen von DOM, das für alle Browser (auch IE 8) geeignet ist:
Siehe diese Antwort .
quelle
Fügen Sie dies einfach am Ende Ihrer HTML-Seite hinzu ...
Weil HTML-Dokumente von oben nach unten analysiert werden.
quelle
Es lohnt sich, in Rock Solid addEvent () und http://www.braksator.com/how-to-make-your-own-jquery nachzuschauen .
Hier ist der Code für den Fall, dass die Site ausfällt
quelle
Dieser browserübergreifende Code ruft eine Funktion auf, sobald das DOM bereit ist:
So funktioniert das:
domReady
dietoString
Methode der Funktion aufgerufen, um eine Zeichenfolgendarstellung der übergebenen Funktion abzurufen und in einen Ausdruck zu verpacken, der die Funktion sofort aufruft.domReady
erstellt ein Skriptelement mit dem Ausdruck und hängt es anbody
das Dokument an.body
nachdem das DOM bereit ist.Wenn Sie dies beispielsweise tun
domReady(function(){alert();});
, wird Folgendes an dasbody
Element angehängt :Beachten Sie, dass dies nur für benutzerdefinierte Funktionen funktioniert. Folgendes wird nicht funktionieren:
domReady(alert);
quelle
Wie wäre es mit dieser Lösung?
quelle
Es ist immer gut, JavaScript-Entsprechungen im Vergleich zu jQuery zu verwenden. Ein Grund ist, dass eine Bibliothek weniger abhängig ist und viel schneller als die jQuery-Entsprechungen.
Eine fantastische Referenz für jQuery-Äquivalente ist http://youmightnotneedjquery.com/ .
Was Ihre Frage betrifft, habe ich den folgenden Code aus dem obigen Link übernommen :) Die einzige Einschränkung ist, dass er nur mit Internet Explorer 9 und höher funktioniert .
quelle
Am minimalsten und 100% funktionsfähig
Ich habe die Antwort von PlainJS ausgewählt und sie funktioniert gut für mich. Es wird
DOMContentLoaded
so erweitert , dass es in allen Browsern akzeptiert werden kann.Diese Funktion entspricht der
$(document).ready()
Methode von jQuery :Im Gegensatz zu jQuery wird dieser Code jedoch nur in modernen Browsern (IE> 8) ordnungsgemäß ausgeführt und nicht, falls das Dokument zum Zeitpunkt des Einfügens dieses Skripts bereits gerendert ist (z. B. über Ajax). Deshalb müssen wir dies ein wenig erweitern:
Dies deckt grundsätzlich alle Möglichkeiten ab und ist ein praktikabler Ersatz für den jQuery-Helfer.
quelle
Es ist das Jahr 2020 und
<script>
Tag hatdefer
Attribut.zum Beispiel:
Es gibt an, dass das Skript ausgeführt wird, wenn die Analyse der Seite abgeschlossen ist.
https://www.w3schools.com/tags/att_script_defer.asp
quelle
Wir haben eine schnelle und schmutzige browserübergreifende Implementierung gefunden, die in den einfachsten Fällen mit einer minimalen Implementierung den Trick ausführen kann:
quelle
doc.body
!?Die hier vorgestellten Lösungen setTimeout / setInterval funktionieren nur unter bestimmten Umständen.
Das Problem tritt insbesondere in älteren Internet Explorer-Versionen bis 8 auf.
Die Variablen, die den Erfolg dieser setTimeout / setInterval-Lösungen beeinflussen, sind:
Der ursprüngliche (native Javascript) Code zur Lösung dieses speziellen Problems ist hier:
Dies ist der Code, aus dem das jQuery-Team seine Implementierung erstellt hat.
quelle
Hier ist, was ich benutze, es ist schnell und deckt alle Grundlagen ab, die ich denke; funktioniert für alles außer IE <9.
Dies scheint alle Fälle zu erfassen:
Das DOMContentLoaded-Ereignis ist in IE9 und allem anderen verfügbar, daher denke ich persönlich, dass es in Ordnung ist, dies zu verwenden. Schreiben Sie die Pfeilfunktionsdeklaration in eine reguläre anonyme Funktion um, wenn Sie Ihren Code nicht von ES2015 auf ES5 übertragen.
Wenn Sie warten möchten, bis alle Assets geladen, alle Bilder usw. angezeigt werden, verwenden Sie stattdessen window.onload.
quelle
Wenn Sie keine sehr alten Browser unterstützen müssen, können Sie dies auch dann tun, wenn Ihr externes Skript mit einem asynchronen Attribut geladen ist :
quelle
Für IE9 +:
quelle
Wenn Sie jQuery am unteren Rand von BODY laden, aber Probleme mit Code haben, der jQuery (<func>) oder jQuery (document) .ready (<func>) schreibt , lesen Sie jqShim auf Github.
Anstatt eine eigene dokumentbereite Funktion neu zu erstellen, werden die Funktionen einfach beibehalten, bis jQuery verfügbar ist, und dann wie erwartet mit jQuery fortgefahren. Wenn Sie jQuery an den unteren Rand des Körpers verschieben, müssen Sie das Laden der Seite beschleunigen. Sie können dies dennoch erreichen, indem Sie die Datei jqShim.min.js in den Kopf Ihrer Vorlage einfügen.
Am Ende habe ich diesen Code geschrieben, um alle Skripte in WordPress in die Fußzeile zu verschieben, und nur dieser Shim-Code befindet sich jetzt direkt in der Kopfzeile.
quelle
Versuche dies:
quelle
onDocReady bietet einen Rückruf, wenn der HTML-Dom für den vollständigen Zugriff / Parse / Manipulation bereit ist.
onWinLoad bietet einen Rückruf, wenn alles geladen wurde (Bilder usw.)
quelle
quelle
Die meisten Vanilla JS Ready-Funktionen berücksichtigen NICHT das Szenario, in dem der
DOMContentLoaded
Handler festgelegt wird, nachdem das Dokument bereits geladen wurde. Dies bedeutet, dass die Funktion niemals ausgeführt wird . Dies kann passieren, wenn SieDOMContentLoaded
in einemasync
externen Skript (<script async src="file.js"></script>
) suchen .Der folgende Code prüft
DOMContentLoaded
nur, ob das Dokument nochreadyState
nicht vorhanden istinteractive
oder nichtcomplete
.Wenn Sie auch den IE unterstützen möchten:
quelle
Ich benutze einfach:
Und anders
document.addEventListener("DOMContentLoaded" //etc
als in der obersten Antwort funktioniert es bereits in IE9 - http://caniuse.com/#search=DOMContentLoaded nur IE11 an.Interessanterweise bin ich
setTimeout
2009 auf diese Lösung gestoßen : Ist die Überprüfung der Bereitschaft des DOM-Overkills?, was wahrscheinlich etwas besser formuliert sein könnte, da ich meinte "ist es übertrieben, die komplizierteren Ansätze verschiedener Frameworks zu verwenden, um die Bereitschaft des DOM zu überprüfen".Meine beste Erklärung dafür, warum diese Technik funktioniert, ist, dass nach Erreichen des Skripts mit einem solchen setTimeout das DOM gerade analysiert wird, sodass die Ausführung des Codes innerhalb des setTimeout verzögert wird, bis dieser Vorgang abgeschlossen ist.
quelle