--- title: MutationObserver slug: Web/API/MutationObserver tags: - API - Advanced - DOM - DOM Reference - NeedsContent - NeedsUpdate - Reference translation_of: Web/API/MutationObserver ---
{{APIRef("DOM")}}
MutationObserver предоставляет возможность получать уведомления об изменении определённых DOM-элементов. MutationObserver является заменой Mutation Events, определённой в спецификации DOM3 Events.
MutationObserver, который вызовет определённую колбэк-функцию при изменении в DOM.callbackMutationObserver.MutationObserver, до того момента пока не будет вызван метод observe().MutationObserver на получение уведомлений о манипуляциях с DOM-элементом.MutationObserver, затем очищает её.MutationObserverInitMutationObserverInit — объект, который может содержать следующие свойства:
true для одного из следующих свойств: childList, attributes, characterData. В противном случае будет вызвана ошибка "An invalid or illegal string was specified"| Property | Description |
childList |
true, если необходимо наблюдать за добавлением или удалением дочерних элементов (Включая текстовые узлы (text nodes)) |
attributes |
true, если необходимо наблюдать за изменениями атрибутов целевого элемента. |
characterData |
true, если необходимо наблюдать за изменениями значения текстового содержимого целевого узла (текстовых узлов дочернего элемента). |
subtree |
true, если необходимо наблюдать за потомками целевого элемента. |
attributeOldValue |
true, если необходимо возвращать предыдущее значение атрибута. |
characterDataOldValue |
true, если необходимо возвращать предыдущее значение Data атрибута. |
attributeFilter |
Устанавливает массив названий атрибутов (без указания пространства имён), если требуется наблюдать за изменениями конкретных атрибутов. |
https://codepen.io/webgeeker/full/YjrZgg/
Приведённый ниже пример взят из этого блога.
// Выбираем целевой элемент
var target = document.getElementById('some-id');
// Конфигурация observer (за какими изменениями наблюдать)
const config = {
attributes: true,
childList: true,
subtree: true
};
// Колбэк-функция при срабатывании мутации
const callback = function(mutationsList, observer) {
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
console.log('A child node has been added or removed.');
} else if (mutation.type === 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
}
}
};
// Создаём экземпляр наблюдателя с указанной функцией колбэка
const observer = new MutationObserver(callback);
// Начинаем наблюдение за настроенными изменениями целевого элемента
observer.observe(target, config);
// Позже можно остановить наблюдение
observer.disconnect();
{{Compat}}