JavaScript MutationObserver.disconnect() — зупинити стеження за DOM
Метод disconnect() припиняє спостереження за всіма вузлами.
Загальний опис
Крім звичайного прибирання, у нього є критично важлива роль — розрив нескінченного циклу.
Якщо всередині обробника змінювати той самий DOM, за яким стежиш, спостерігач покличе себе знову — і так вічно. Класичний рецепт: перед своїми змінами disconnect(), після — observe() заново.
Незабрані на момент виклику зміни при цьому зникають. Якщо вони потрібні, спершу забери їх через takeRecords().
- Порада
-
Змінюєш DOM усередині обробника — обов'язково обгортай зміни в
автор: NagarDdisconnect()/observe(). Інакше отримаєш вічний цикл.
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| disconnect | 26+ | 14+ | 7+ | 15+ | 12+ | 11+ |
| Переглядач | ||||
|---|---|---|---|---|
| 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'));
Коментарі
Коментарів ще немає — будьте першим!