J'ai besoin de surveiller un changement d'attribut sur n'importe lequel des enfants d'un élément DOM spécifique. Jusqu'à présent, j'ai utilisé événements de mutation .
Le problème était qu'ils étaient bogués : par exemple sous Chromium, DOMAttrModified
n'a pas été renvoyé mais DOMSubtreeModified
était. Le problème était facile à résoudre : car selon la spécification, DOMSubtreeModified
est déclenché si l'un des autres événements est déclenché, donc j'ai juste écouté les événements suivants DOMSubtreeModified
.
Quoi qu'il en soit, Chromium, dans les versions récentes, a cessé de déclencher quoi que ce soit si un attribut a été modifié.
Le nouveau API de l'observateur de mutations Cependant, il fonctionne parfaitement.
Jusqu'à présent, je n'avais besoin de déclencher une fonction de rappel qu'en cas de modification du sous-arbre d'un élément spécifique - tout simplement parce que rien d'autre n'était censé changer - j'ai donc résolu mon problème en utilisant simplement les événements de mutation et l'observateur de mutation (lorsqu'il est disponible) dans le même morceau de code.
Cependant, j'ai maintenant besoin d'effectuer un filtrage plus puissant des événements (par exemple, sur un nouveau nœud, sur un nœud supprimé). une bibliothèque, éventuellement un plug-in jQuery qui me permettrait d'utiliser élégamment les deux de ces API - MutationObserver
si disponible et les événements de mutation comme solution de rechange, avec la possibilité de filtrer pour des types d'événements spécifiques (par exemple, élément ajouté, attribut modifié).
Par exemple
$("#test").watch({onNewElement: 1}, function(newElement){})
$("#test").watch({onNewAttribute: 1}, function(modifiedElement) {})
Ou sans jQuery
watchChanges("#test", {onNewElement: 1}, function(newElement){})
watchChanges("#test", {onNewAttribute: 1}, function(modifiedElement){})