← Tous les articles

API et helpers

MutationObserver dans les règles — une règle qui suit le rythme de la page

Votre règle s'exécute après le chargement de la page — mais les pages modernes ne s'arrêtent pas au chargement. Une liste tire d'autres entrées, une SPA échange des vues entières, du contenu apparaît des secondes plus tard. Un MutationObserver fait réagir la règle à ce qui se passe après le démarrage.

Le problème : le code s'exécute une fois

Le JavaScript d'une règle JustZix s'exécute une fois, au chargement de la page. Si vous masquez .promo et que la page ajoute d'autres .promo au défilement, votre code ne les a jamais vus — ils n'existaient pas encore. Vous avez besoin de quelque chose qui réagit à un changement du DOM.

MutationObserver en trois lignes

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

Le pattern est toujours le même : une fonction apply fait le travail, vous l'appelez une fois tout de suite, puis vous la confiez au MutationObserver pour qu'il l'appelle à chaque changement.

Ce que signifient les options observe

Piège un — la boucle de rétroaction

Si apply change le DOM elle-même (et c'est généralement le cas), ce changement déclenche l'observer, qui rappelle apply. Pour du masquage, c'est généralement sans danger — le second passage n'a plus rien à faire. Mais si apply ajoute quelque chose, marquez les éléments traités :

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

Le sélecteur :not([data-jz]) fait que vous traitez chaque élément exactement une fois — la boucle ne s'emballe pas.

Piège deux — le coût

Sur les pages très dynamiques, l'observer se déclenche des centaines de fois. Gardez apply peu coûteuse : un querySelector rapide, un marqueur « fait », aucun calcul lourd. Si elle doit être lourde — enveloppez-la dans un debounce (différez l'exécution de 100 ms et réinitialisez le minuteur à chaque nouveau changement).

À voir aussi

Installez JustZix — et écrivez des règles qui suivent le rythme de la page.

Notez cet article

Aucune note — soyez le premier.

Essayez vous-même

Installez JustZix et collez n'importe quel snippet de cet article. Deux minutes de zéro à une règle fonctionnelle sur tous vos appareils.

Obtenir JustZix

Fonctionnalités · Comment ça marche · Exemples · Cas d'usage