Ich muss auf eine Attributänderung bei einem der untergeordneten Elemente eines bestimmten DOM-Elements achten. Bisher habe ich verwendet Mutationsereignisse.
Das Problem war – sie waren fehlerhaft: zB unter Chromium, DOMAttrModified
wurde aber nicht gefeuert DOMSubtreeModified
war. Das Problem war einfach zu lösen: Denn laut Spezifikation DOMSubtreeModified
gefeuert wird, wenn eines der anderen Ereignisse gefeuert wird, also habe ich gerade zugehört DOMSubtreeModified
.
Wie auch immer, Chromium hat in den letzten Versionen aufgehört, irgendetwas zu feuern, wenn ein Attribut geändert wurde.
Das neue Mutation Observer-APIfunktioniert aber einwandfrei.
Bis jetzt muss ich nur bei JEDER Änderung des Unterbaums eines bestimmten Elements einen Rückruf auslösen – einfach weil sich nichts anderes ändern soll – also habe ich mein Problem gelöst, indem ich einfach Mutationsereignisse und Mutationsbeobachter (falls verfügbar) in demselben verwendet habe Stück Code.
Jetzt muss ich jedoch die Ereignisse stärker filtern (z. B. auf neuen Knoten, auf entfernten Knoten) – so ist es da eine Bibliothek, möglicherweise ein jQuery-Plug-indas würde mir erlauben, elegant zu verwenden beide dieser APIs – MutationObserver
falls verfügbar und Mutationsereignisse als Fallback, mit der Möglichkeit, nach bestimmten Ereignistypen zu filtern (z. B. Element hinzugefügt, Attribut geändert).
Z.B
$("#test").watch({onNewElement: 1}, function(newElement){})
$("#test").watch({onNewAttribute: 1}, function(modifiedElement) {})
Oder ohne jQuery
watchChanges("#test", {onNewElement: 1}, function(newElement){})
watchChanges("#test", {onNewAttribute: 1}, function(modifiedElement){})
Einige Suchen haben dies gefunden, aber es unterstützt nur die neue API: code.google.com/p/mutation-summary. Ich habe auch Folgendes gefunden, was eine einfache Version dessen zu sein scheint, wonach Sie fragen: stackoverflow.com/questions/10868104/…
– dreißig Punkte
15. Juli 2012 um 11:56 Uhr
Ich habe auch Mutationszusammenfassung gefunden, aber es unterstützt keine Mutationsereignisse als Fallback. Die erste Antwort des von Ihnen geposteten Threads ist im Grunde das, was ich in meinem Code mache, um Attributänderungen zu beobachten. Nach dem gleichen Prinzip kann eine Bibliothek erstellt werden, die es ermöglicht, nach bestimmten DOM-Ereignissen zu suchen, indem sowohl Mutationsbeobachter als auch (als Fallback) Ereignisse verwendet werden. Das ist, was ich brauche.
– Ivo
15. Juli 2012 um 12:00 Uhr
+1: Ich grabe wirklich nach Best-Practice-Fragen.
– Jezen Thomas
21. Juli 2012 um 23:50 Uhr