← Wszystkie wpisy

API i helpers

MutationObserver w regułach — reguła, która nadąża za stroną

Twoja reguła działa po wczytaniu strony — ale nowoczesne strony nie kończą się na wczytaniu. Lista doładowuje kolejne wpisy, SPA podmienia całe widoki, treść pojawia się sekundy później. MutationObserver sprawia, że reguła reaguje na to, co dzieje się po starcie.

Problem: kod biegnie raz

JavaScript reguły JustZix wykonuje się raz, gdy strona się ładuje. Jeśli ukrywasz .promo, a strona dorzuca kolejne .promo przy scrollu — Twój kod ich nie widział, bo jeszcze nie istniały. Potrzebujesz czegoś, co zareaguje na zmianę DOM-u.

MutationObserver w trzech liniach

function apply() {
  document.querySelectorAll('.promo').forEach(el => el.remove());
}
apply();
new MutationObserver(apply)
  .observe(document.body, { childList: true, subtree: true });

Wzorzec jest zawsze ten sam: funkcja apply robi swoje, wywołujesz ją raz od razu, a potem oddajesz MutationObserver-owi, żeby wołał ją przy każdej zmianie.

Co znaczą opcje observe

Pułapka pierwsza — pętla zwrotna

Jeśli apply sama zmienia DOM (a zwykle zmienia), to ta zmiana odpala obserwatora, który znów woła apply. Przy ukrywaniu to zwykle nieszkodliwe — drugi przebieg nie ma nic do roboty. Ale jeśli apply coś dodaje, oznaczaj zrobione elementy:

function apply() {
  document.querySelectorAll('.card:not([data-jz])').forEach(el => {
    el.dataset.jz = '1';
    el.prepend(makeBadge());
  });
}

Selektor :not([data-jz]) sprawia, że każdy element obsłużysz dokładnie raz — pętla się nie nakręca.

Pułapka druga — koszt

Na bardzo dynamicznych stronach obserwator odpala się setki razy. Trzymaj apply tanią: szybki querySelector, znacznik „zrobione", żadnych ciężkich obliczeń. Jeśli musi być ciężka — opakuj ją w debounce (odłóż wykonanie o 100 ms i resetuj licznik przy kolejnej zmianie).

Zobacz też

Zainstaluj JustZix — i pisz reguły, które nadążają za stroną.

Oceń ten wpis

Brak ocen — oceń jako pierwszy.

Wypróbuj samodzielnie

Zainstaluj JustZix i wklej dowolny snippet z tego artykułu. Dwie minuty od zera do działającej reguły na wszystkich Twoich urządzeniach.

Pobierz JustZix

Funkcje · Jak to działa · Przykłady · Zastosowania