Мне нужно следить за изменением атрибута для любого из дочерних элементов определенного элемента DOM. До сих пор я использовал события мутации.
Проблема заключалась в том, что они были ошибочными: например, под хромом DOMAttrModified
не был уволен, но DOMSubtreeModified
был. Проблема была легко решена: потому что согласно спецификации DOMSubtreeModified
запускается, если какое-либо из других событий запущено, поэтому я просто прослушал DOMSubtreeModified
.
В любом случае, Chromium в последних версиях прекратил стрельбу, если атрибут был изменен.
Новый API-интерфейс Mutation Observer работает безупречно.
До сих пор мне нужно только запустить обратный вызов при ЛЮБОЙ смене поддерева определенного элемента - просто потому, что ничего другого не должно меняться - поэтому я решил свою проблему, просто используя события мутации и наблюдатель мутаций (когда это доступно) в том же фрагменте кода.
Однако теперь мне нужно сделать более мощную фильтрацию событий (например, в новом node, на удаленной node)), так что есть библиотека, возможно, плагин jQuery, что позволило бы мне элегантно использовать оба этих API-интерфейсов - MutationObserver
, если они доступны, и события мутации в качестве резервной копии, с возможностью фильтрации для определенных типов событий (например, добавленный элемент, измененный атрибут).
например.
$("#test").watch({onNewElement: 1}, function(newElement){})
$("#test").watch({onNewAttribute: 1}, function(modifiedElement) {})
Или без jQuery
watchChanges("#test", {onNewElement: 1}, function(newElement){})
watchChanges("#test", {onNewAttribute: 1}, function(modifiedElement){})