Je veux exécuter une fonction lorsque des div ou des entrées sont ajoutés au html. Est-ce possible?
Par exemple, une entrée de texte est ajoutée, puis la fonction doit être appelée.
Je veux exécuter une fonction lorsque des div ou des entrées sont ajoutés au html. Est-ce possible?
Par exemple, une entrée de texte est ajoutée, puis la fonction doit être appelée.
Réponses:
Mise à jour 2015, nouvelle
MutationObserver
prise en charge par les navigateurs modernes:Chrome 18+, Firefox 14+, IE 11+, Safari 6+
Si vous avez besoin de prendre en charge les plus anciennes, vous pouvez essayer de revenir à d'autres approches comme celles mentionnées dans cette réponse de 5 (!) Ans ci-dessous. Il y a des dragons. Prendre plaisir :)
Quelqu'un d'autre change le document? Parce que si vous avez un contrôle total sur les changements, il vous suffit de créer votre propre
domChanged
API - avec une fonction ou un événement personnalisé - et de la déclencher / appeler partout où vous modifiez les choses.Le DOM niveau 2 a des types d'événements de mutation , mais les anciennes versions d'IE ne le prennent pas en charge. Notez que les événements de mutation sont déconseillés dans la spécification des événements DOM3 et ont une pénalité de performance .
Vous pouvez essayer d'émuler un événement de mutation avec
onpropertychange
dans IE (et revenir à l'approche par force brute si aucun d'entre eux n'est disponible).Pour un domChange complet, un intervalle peut être un sur-kill. Imaginez que vous devez stocker l'état actuel de l'ensemble du document et examiner que chaque propriété de chaque élément est identique.
Peut-être que si vous êtes uniquement intéressé par les éléments et leur ordre (comme vous l'avez mentionné dans votre question), un
getElementsByTagName("*")
peut fonctionner. Cela se déclenchera automatiquement si vous ajoutez un élément, supprimez un élément, remplacez des éléments ou modifiez la structure du document.J'ai écrit une preuve de concept:
Usage:
Cela fonctionne sur IE 5.5+, FF 2+, Chrome, Safari 3+ et Opera 9.6+
la source
C'est l'approche ultime jusqu'à présent, avec le plus petit code:
IE9 +, FF, Webkit:
la source
mutations, observer
paramètres à la fonction de rappel pour plus de contrôle.J'ai récemment écrit un plugin qui fait exactement cela - jquery.initialize
Vous l'utilisez de la même manière que la
.each
fonctionLa différence
.each
est - il faut votre sélecteur, dans ce cas.some-element
et attendez de nouveaux éléments avec ce sélecteur à l'avenir, si un tel élément est ajouté, il sera également initialisé.Dans notre cas, la fonction d'initialisation change simplement la couleur de l'élément en bleu. Donc, si nous ajoutons un nouvel élément (que ce soit avec ajax ou même l'inspecteur F12 ou quoi que ce soit) comme:
Le plugin l'initiera instantanément. Le plugin s'assure également qu'un élément n'est initialisé qu'une seule fois. Donc, si vous ajoutez un élément, puis
.detach()
à partir du corps, puis ajoutez-le à nouveau, il ne sera pas réinitialisé à nouveau.Le plugin est basé sur
MutationObserver
- il fonctionnera sur IE9 et 10 avec les dépendances comme détaillé sur la page readme .la source
ou vous pouvez simplement créer votre propre événement , qui se déroule partout
Exemple complet http://jsfiddle.net/hbmaam/Mq7NX/
la source
Ceci est un exemple utilisant MutationObserver de Mozilla adapté de ce billet de blog
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
la source
Utilisez l' interface MutationObserver comme indiqué dans le blog de Gabriele Romanato
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
la source
Que diriez-vous d'étendre un jquery pour cela?
Jquery 1.9+ a construit un support pour cela (j'ai entendu dire non testé).
la source