В дополнение к «необработанным» инструментам, предоставляемым MutationObserver
API , существуют «удобные» библиотеки для работы с мутациями DOM.
Обратите внимание: MutationObserver представляет каждое изменение DOM с точки зрения поддеревьев. Так что, если вы, например, ожидаете вставки определенного элемента, он может быть глубоко внутри дочерних элементов mutations.mutation[i].addedNodes[j]
.
Другая проблема - когда ваш собственный код, реагируя на мутации, меняет DOM - вы часто хотите отфильтровать его.
Хорошей удобной библиотекой, которая решает такие проблемы, является mutation-summary
(отказ от ответственности: я не автор, я просто довольный пользователь), которая позволяет вам задавать вопросы, которые вас интересуют, и получать именно это.
Базовый пример использования из документов:
var observer = new MutationSummary({
callback: updateWidgets,
queries: [{
element: '[data-widget]'
}]
});
function updateWidgets(summaries) {
var widgetSummary = summaries[0];
widgetSummary.added.forEach(buildNewWidget);
widgetSummary.removed.forEach(cleanupExistingWidget);
}
([{}])
журнал в консоли, который показывает ожидаемое,MutationRecord
когда я нажимаю на него. Пожалуйста, проверьте еще раз, поскольку это может быть временная техническая ошибка в JSFiddle. Я еще не тестировал его в IE, поскольку у меня нет IE 10, который в настоящее время является единственной версией, поддерживающей события мутации.