Java ScriptのObserver(監視者)にはいくつか種類がありますが、Mutation ObserverはDOMの変更を監視してくれます。
単純にDOMが生成された、削除された、だけでなく属性値の変化も感知してくれるので、個人的にはWAI ARIAのstate変化を監視してもらうのに重宝してます。
Mutation Observerのオプション
Mutation Observerでは下記のオプションを設定できます。初期値は全部false。当然ながら全てfalseのままだとエラーがでて動きません。
| 設定名 | 内容 |
|---|---|
| childList | 子要素の増減を監視 |
| attributes | 属性の変更を監視 |
| attributeFilter | 特定の属性だけ監視したいときに設定 |
| attributeOldValue | 属性が変更される前の値を取得する |
| characterData | テキストノードの内容変更を監視 |
| characterDataOldValue | テキストノードの内容が変更される前の内容を取得する |
| subtree | 監視対象をサブツリー全体に拡大する |
Mutation Observerの基本使用例
const observer = new MutationObserver(callback);
observer.observe(target, config);
callback は処理内容。targetは監視対象。configは先ほどのオプションです。
なので下のような書き方が読みやすくて良いかと。
const callback =()=>{
// 処理
};
const config ={
subtree: true
};
const target = xxxxx ;
const observer = new MutationObserver(callback);
observer.observe(target, config);
戻り値は配列
observerの戻り値はオプションに基づいた記録(Mutation Recordオブジェクト)の配列で返されます。
ですのでcallbackでMutationRecordを利用するにはループ処理を行なう必要があります。
下は非常に簡単に作ったサンプルです。aria-hiddenを監視しtabindexを切り替えています。
See the Pen Mutation Observer by Takashi Abe (@TakeshiAbe) on CodePen.

