J'ai un div qui a son contenu change tout le temps, que ce soit ajax requests
, jquery functions
, blur
etc , etc.
Existe-t-il un moyen de détecter les changements sur ma div à tout moment?
Je ne veux utiliser aucun intervalle ou valeur par défaut vérifiée.
Quelque chose comme ça ferait
$('mydiv').contentchanged() {
alert('changed')
}
keypress
événement à un<div>
élément modifiable . Je ne suis pas sûr que les solutions y s'appliquent. Ils n'accepteraient certainement aucune modification programmatique du contenu d'un élément.Réponses:
Si vous ne voulez pas utiliser la minuterie et vérifier innerHTML, vous pouvez essayer cet événement
Plus de détails et les données de support du navigateur sont ici .
Attention: dans les versions plus récentes de jQuery, bind () est obsolète, vous devez donc utiliser on () à la place:
la source
$("body").on('DOMSubtreeModified', "mydiv", function() { });
Utilisation de Javascript MutationObserver
la source
Puisque
$("#selector").bind()
est obsolète , vous devez utiliser:la source
#
pour indiquer que le symbole devait passer avant le sélecteur.Vous pouvez essayer ceci
mais cela pourrait ne pas fonctionner dans Internet Explorer, je ne l'ai pas testé
la source
clearTimeout(window.something); window.something = setTimeout(...);
Vous recherchez MutationObserver ou Mutation Events . Ni l'un ni l'autre ne sont pris en charge partout et ne sont pas considérés avec trop d'affection par le monde des développeurs.
Si vous savez (et pouvez vous assurer que) la taille du div changera, vous pourrez peut-être utiliser l' événement de redimensionnement du crossbrowser .
la source
Le code suivant fonctionne pour moi.
J'espère que cela aidera quelqu'un :)
la source
Il n'y a pas de solution intégrée à ce problème, c'est un problème avec votre modèle de conception et de codage.
Vous pouvez utiliser le modèle éditeur / abonné. Pour cela, vous pouvez utiliser des événements personnalisés jQuery ou votre propre mécanisme d'événements.
Première,
Vous pouvez maintenant vous abonner aux événements divhtmlchanging / divhtmlchanged comme suit,
Maintenant, vous devez changer vos modifications de contenu div via cette
changeHtml()
fonction. Vous pouvez donc surveiller ou effectuer les modifications nécessaires en conséquence, car l'argument de données de rappel de liaison contenant les informations.Vous devez changer le code HTML de votre div comme ceci;
Et aussi, vous pouvez l'utiliser pour tout élément html à l'exception de l'élément d'entrée. Quoi qu'il en soit, vous pouvez le modifier pour l'utiliser avec n'importe quel élément.
la source
Utilisez MutationObserver comme on le voit dans cet extrait fourni par Mozilla , et adapté de ce billet de blog
Alternativement, vous pouvez utiliser l'exemple JQuery vu dans ce lien
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
la source
Vous pouvez stocker l'ancien innerHTML du div dans une variable. Définissez un intervalle pour vérifier si l'ancien contenu correspond au contenu actuel. Quand ce n'est pas vrai, faites quelque chose.
la source
Essayez le MutationObserver:
prise en charge du navigateur: http://caniuse.com/#feat=mutationobserver
la source
L'ajout de contenu à une div, que ce soit via jQuery ou via de DOM-API directement, revient par défaut à la
.appendChild()
fonction. Ce que vous pouvez faire est de remplacer la.appendChild()
fonction de l'objet actuel et d'y implémenter un observateur. Maintenant que nous avons outrepassé notre.appendChild()
fonction, nous devons emprunter cette fonction à un autre objet pour pouvoir ajouter le contenu. Pour cela, nous appelons.appendChild()
un autre div pour finalement ajouter le contenu. Bien sûr, cela vaut également pour le.removeChild()
.Vous trouverez ici un exemple naïf. Vous pouvez l'étendre par vous-même, je suppose. http://jsfiddle.net/RKLmA/31/
Soit dit en passant: cela montre que JavaScript est conforme au principe OpenClosed. :)
la source