Quel est l'équivalent non jQuery de $(document).ready()
?
javascript
jquery
TIMEX
la source
la source
$(document).ready()
événement jQuery sans utiliser de bibliothèque, jetez un œil à ceci: stackoverflow.com/questions/1795089/…$(document).ready()
- books.google.com/… . Il utilise également l'addEvent
abstraction de liaison d'événement écrite par Dean Edwards, dont le code est également dans le livre :)Réponses:
Ce
$(document).ready()
qui est bien, c'est qu'il se déclenche avantwindow.onload
. La fonction de chargement attend que tout soit chargé, y compris les ressources externes et les images.$(document).ready
, cependant, se déclenche lorsque l'arborescence DOM est terminée et peut être manipulée. Si vous voulez rendre DOM prêt, sans jQuery, vous pouvez vous connecter à cette bibliothèque. Quelqu'un a extrait juste laready
partie de jQuery. C'est joli et petit et vous pourriez le trouver utile:domready chez Google Code
la source
Cela fonctionne parfaitement, de l'ECMA
Le
window.onload
n'est pas égal à JQuery$(document).ready
car$(document).ready
n'attend que l'arborescence DOM tout enwindow.onload
vérifiant tous les éléments, y compris les ressources externes et les images.EDIT : ajout d'IE8 et d'un équivalent plus ancien, grâce à l' observation de Jan Derk . Vous pouvez lire la source de ce code sur MDN à ce lien :
Il existe d'autres options en dehors de
"interactive"
. Voir le lien MDN pour plus de détails.la source
document.addEventListener("DOMContentLoaded",function(){console.log(123)})
essayez-le maintenantUne petite chose que j'ai mise en place
domready.js
Comment l'utiliser
Vous pouvez également modifier le contexte dans lequel le rappel s'exécute en passant un deuxième argument
la source
Maintenant que nous sommes en 2018, voici une méthode rapide et simple.
Cela ajoutera un écouteur d'événements, mais s'il s'est déjà déclenché, nous vérifierons que le dom est dans un état prêt ou qu'il est complet. Cela peut se déclencher avant ou après le chargement des sous-ressources (images, feuilles de style, cadres, etc.).
Lectures supplémentaires
Mise à jour
Voici quelques aides utilitaires rapides utilisant l'importation et l'exportation standard ES6 que j'ai écrites qui incluent également TypeScript. Peut-être que je peux me débrouiller pour en faire une bibliothèque rapide qui peut être installée dans des projets en tant que dépendance.
Javascript
Manuscrit
Promesses
la source
Selon http://youmightnotneedjquery.com/#ready, un bon remplacement qui fonctionne toujours avec IE8 est
améliorations : Personnellement, je vérifierais également si le type de
fn
est une fonction. Et comme @elliottregan suggéré de supprimer l'écouteur d'événements après utilisation.La raison pour laquelle je réponds à cette question tardivement est que je cherchais cette réponse mais que je ne l'ai pas trouvée ici. Et je pense que c'est la meilleure solution.
la source
Il existe un remplacement basé sur des normes, DOMContentLoaded qui est pris en charge par plus de 90% + des navigateurs, mais pas IE8 (Donc, ci-dessous, l'utilisation du code par JQuery pour la prise en charge du navigateur) :
La fonction native de jQuery est beaucoup plus compliquée que simplement window.onload, comme illustré ci-dessous.
la source
DOMContentLoaded
que desload
événementsaddEventListener
et, en premier lieu, ce feu supprime les deux écouteurs, de sorte qu'il ne se déclenche pas deux fois.En JavaScript simple vanille, sans bibliothèques? C'est une erreur.
$
est simplement un identifiant et n'est pas défini, sauf si vous le définissez.jQuery définit
$
comme son propre "tout objet" (également connu sous le nomjQuery
afin que vous puissiez l'utiliser sans entrer en conflit avec d'autres bibliothèques). Si vous n'utilisez pas jQuery (ou une autre bibliothèque qui le définit), alors$
ne sera pas défini.Ou demandez-vous quel est l'équivalent en JavaScript simple? Dans ce cas, vous voulez probablement
window.onload
, ce qui n'est pas exactement équivalent, mais c'est le moyen le plus rapide et le plus simple de se rapprocher du même effet en JavaScript vanille.la source
Le moyen le plus simple dans les navigateurs récents serait d'utiliser les GlobalEventHandlers appropriés , onDOMContentLoaded , onload , onloadeddata (...)
L'événement DOMContentLoaded est déclenché lorsque le document HTML initial a été complètement chargé et analysé, sans attendre la fin du chargement des feuilles de style, des images et des sous-trames. Un chargement d'événement très différent ne doit être utilisé que pour détecter une page entièrement chargée. C'est une erreur incroyablement populaire d'utiliser la charge là où DOMContentLoaded serait beaucoup plus approprié, alors soyez prudent.
https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded
La fonction utilisée est une IIFE, très utile dans ce cas, car elle se déclenche lorsqu'elle est prête:
https://en.wikipedia.org/wiki/Immediately-invoked_function_expression
Il est évidemment plus approprié de le placer à la fin de tout script.
Dans ES6, nous pouvons également l'écrire comme une fonction de flèche:
Le mieux est d'utiliser les éléments DOM, on peut attendre que n'importe quelle variable soit prête, ce qui déclenche un IIFE fléché.
Le comportement sera le même, mais avec moins d'impact sur la mémoire.
Dans de nombreux cas, l' objet document se déclenche également lorsqu'il est prêt , au moins dans mon navigateur. La syntaxe est alors très agréable, mais elle nécessite des tests supplémentaires sur les compatibilités.
la source
Le corps onLoad pourrait également être une alternative:
la source