Potrzebuję oglądać dla zmiany atrybutu na dowolnym z dzieci określonego elementu DOM. Do tej pory używam mutation events.Oglądanie zmian DOM, elegancki sposób
Problem polegał na tym, że były błędne: pod Chromium, DOMAttrModified
nie został zwolniony, ale był DOMSubtreeModified
. Problem był łatwy do rozwiązania: ponieważ zgodnie ze specyfikacją, DOMSubtreeModified
jest wywoływane, jeśli którykolwiek z pozostałych zdarzeń jest uruchamiany, więc właśnie posłuchałem DOMSubtreeModified
.
W każdym razie Chromium w najnowszych wersjach przestał wystrzeliwać wszystko, jeśli atrybut został zmodyfikowany.
Nowy Mutation Observer API działa jednak bezbłędnie.
Do chwili obecnej wystarczy wywołać wywołanie zwrotne po DOWOLNEJ zmianie poddrzewa określonego elementu - po prostu dlatego, że nic innego nie powinno się zmienić - więc rozwiązałem swój problem, używając tylko obserwatora mutacji & (jeśli dostępny) w tym samym kawałku kodu.
Jednak teraz potrzebuję silniejszego filtrowania zdarzeń (np. Na nowym węźle, na usuniętym węźle) - tak jest tam biblioteka, prawdopodobnie wtyczka jQuery, która pozwoliłaby mi elegancko używać zarówno tych interfejsów API - MutationObserver
, jeśli są dostępne i zdarzenia mutacji jako rezerwowe, z możliwością filtrowania dla określonych typów zdarzeń (np. Element dodany, atrybut zmieniony).
E.g.
$("#test").watch({onNewElement: 1}, function(newElement){})
$("#test").watch({onNewAttribute: 1}, function(modifiedElement) {})
Albo bez jQuery
watchChanges("#test", {onNewElement: 1}, function(newElement){})
watchChanges("#test", {onNewAttribute: 1}, function(modifiedElement){})
poszukiwaniach znaleźć to, ale obsługuje tylko nowe API: http://code.google.com/p/mutation-summary/ . Znalazłem także to, co wydaje się być prostą wersją tego, o co prosisz: http://stackoverflow.com/questions/10868104/can-you-have-a-javascript-hook-trigger-aftera-a- dom-elements-style-object-change – thirtydot
Znalazłem także podsumowanie mutacji, ale nie obsługuje ono zdarzeń mutacji jako rezerwowych. Pierwsza odpowiedź na opublikowany wątek jest w zasadzie tym, co robię w moim kodzie, aby obserwować zmiany atrybutów. Na tej samej zasadzie można zbudować bibliotekę, która pozwala oglądać konkretne zdarzenia DOM przy użyciu zarówno obserwatorów mutacji, jak i zdarzeń (jako rezerwowych). Tego właśnie potrzebuję. – Ivo
+1: Naprawdę kopie pytania o "najlepszą praktykę". –