MutationObserver
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since â¨Ð¸ÑÐ»Ñ 2015 г.â©.
MutationObserver пÑедоÑÑавлÑÐµÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ð¾ÑÑÑ Ð¿Ð¾Ð»ÑÑаÑÑ ÑÐ²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ð¾Ð± изменении опÑеделÑннÑÑ
DOM-ÑлеменÑов. MutationObserver ÑвлÑеÑÑÑ Ð·Ð°Ð¼ÐµÐ½Ð¾Ð¹ Mutation Events, опÑеделÑнной в ÑпеÑиÑикаÑии DOM3 Events.
ÐонÑÑÑÑкÑоÑ
MutationObserver()-
СоздаÑÑ Ð¸ возвÑаÑÐ°ÐµÑ Ð½Ð¾Ð²Ñй
MutationObserver, коÑоÑÑй вÑÐ·Ð¾Ð²ÐµÑ Ð¾Ð¿ÑеделÑннÑÑ ÐºÐ¾Ð»Ð±Ñк-ÑÑнкÑÐ¸Ñ Ð¿Ñи изменении в DOM.
ÐаÑамеÑÑÑ
callback-
ÐÑзÑваеÑÑÑ Ð¿Ñи каждом изменении DOM-ÑлеменÑа. ÐаблÑдаÑÐµÐ»Ñ Ð²ÑзÑÐ²Ð°ÐµÑ Ð´Ð°Ð½Ð½ÑÑ ÑÑнкÑÐ¸Ñ Ñ Ð´Ð²ÑÐ¼Ñ Ð°ÑгÑменÑами. ÐеÑвÑм аÑгÑменÑом ÑвлÑеÑÑÑ Ð¼Ð°ÑÑив обÑекÑов MutationRecord, вÑоÑÑм аÑгÑменÑом ÑвлÑеÑÑÑ ÑкземплÑÑ
MutationObserver.
ÐеÑÐ¾Ð´Ñ ÑкземплÑÑа
disconnect()-
ÐÑекÑаÑÐ°ÐµÑ Ð¿Ð¾Ð»ÑÑение Ñведомлений об изменении DOM-ÑлеменÑа ÑкземплÑÑом
MutationObserver, до Ñого моменÑа пока не бÑÐ´ÐµÑ Ð²Ñзван меÑод observe(). observe()-
ÐодпиÑÑÐ²Ð°ÐµÑ ÑкземплÑÑ
MutationObserverна полÑÑение Ñведомлений о манипÑлÑÑиÑÑ Ñ DOM-ÑлеменÑом. takeRecords()-
ÐозвÑаÑÐ°ÐµÑ ÑекÑÑий
ArrayоÑеÑеди ÑкземплÑÑаMutationObserver, заÑем оÑиÑÐ°ÐµÑ ÐµÑ.
MutationObserverInit
MutationObserverInit â обÑекÑ, коÑоÑÑй Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑледÑÑÑие ÑвойÑÑва:
ÐÑимеÑание:
Так или инаÑе необÑ
одимо ÑÑÑановиÑÑ 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 |
УÑÑÐ°Ð½Ð°Ð²Ð»Ð¸Ð²Ð°ÐµÑ Ð¼Ð°ÑÑив названий аÑÑибÑÑов (без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð¿ÑоÑÑÑанÑÑва имÑн), еÑли ÑÑебÑеÑÑÑ Ð½Ð°Ð±Ð»ÑдаÑÑ Ð·Ð° изменениÑми конкÑеÑнÑÑ Ð°ÑÑибÑÑов. |
Mutation Observer & customize resize event listener & demo
ÐÑÐ¸Ð¼ÐµÑ Ð¸ÑполÑзованиÑ
ÐÑиведÑннÑй ниже пÑÐ¸Ð¼ÐµÑ Ð²Ð·ÑÑ Ð¸Ð· ÑÑого блога.
// ÐÑбиÑаем Ñелевой ÑлеменÑ
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();
СпеÑиÑикаÑии
| Specification |
|---|
| DOM > # interface-mutationobserver > |