JavaScript MutationObserver.disconnect() — зупинити стеження за DOM


Метод disconnect() припиняє спостереження за всіма вузлами.

автор: NagarD

Загальний опис

Крім звичайного прибирання, у нього є критично важлива роль — розрив нескінченного циклу.

Якщо всередині обробника змінювати той самий DOM, за яким стежиш, спостерігач покличе себе знову — і так вічно. Класичний рецепт: перед своїми змінами disconnect(), після — observe() заново.

Незабрані на момент виклику зміни при цьому зникають. Якщо вони потрібні, спершу забери їх через takeRecords().

автор: NagarD

Порада

Змінюєш DOM усередині обробника — обов'язково обгортай зміни в disconnect() / observe(). Інакше отримаєш вічний цикл.

автор: NagarD

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
disconnect 26+ 14+ 7+ 15+ 12+ 11+
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
disconnect 4.4+ yes yes 7+

Приклади

+ запропонувати свій приклад у пісочниці

Обробник міняє DOM — і не зациклюється.

HTML

<div id="container"><p>Вміст</p></div>

JS

const container = document.getElementById('container');

function normalize(node) {
    // тут упорядкування DOM — наші власні зміни
}

const observer = new MutationObserver(() => {
    console.log('Зміна ззовні');

    // ВИМИКАЄМО перед власними змінами
    observer.disconnect();

    normalize(container);

    // і вмикаємо назад
    observer.observe(container, { childList: true, subtree: true });
});

observer.observe(container, { childList: true, subtree: true });

// провокуємо спостерігача
container.appendChild(document.createElement('span'));
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід