MutationObserver
MutationObserver インターフェイスは、 DOM ツリーへ変更が加えられたことを監視することができる機能を提供します。これは DOM3 Events の仕様で定義されていた Mutation Events 機能の置き換えとして設計されたものです。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 26 | 12 | 14 | 7 | 26 | 7 | |
| MutationObserver の disconnect() メソッドは、オブザーバーに変更の監視を停止させます。 | 18 | 12 | 14 | 6 | 18 | 6 |
| DOM の MutationObserver() コンストラクターは、MutationObserver インターフェイスの一部で、指定されたコールバックを DOM イベントが発生したときに実行するオブザーバーを作成して返します。 | 26 | 12 | 14 | 7 | 26 | 7 |
| MutationObserver の observe() メソッドは、MutationObserver コールバックを設定し、与えられたオプションに適合する DOM への変更の通知の受信を開始します。 | 18 | 12 | 14 | 6 | 18 | 6 |
| MutationObserver の takeRecords() メソッドは、検出されたがオブザーバーのコールバック関数で処理されていない DOM の変更に一致するすべてのリストを返し、変更キューは空のままにします。 | 20 | 12 | 14 | 6 | 25 | 6 |
| MutationRecord は、 DOM に生じた個々の変更を表します。これは MutationObserver のコールバック関数に渡されるオブジェクトです。 | 16 | 12 | 14 | 7 | 18 | 7 |
| MutationRecord の読み取り専用プロパティ `addedNodes` は、MutationObserver によって検出されたミューテーションによってターゲットノードに追加されたノードの NodeList です。 | 16 | 12 | 14 | 7 | 18 | 7 |
| MutationRecord の読み取り専用プロパティ attributeName には、MutationObserver によって監視されているノードに属する、変更された属性の名前が含まれます。 | 16 | 12 | 14 | 7 | 18 | 7 |
| MutationRecord の読み取り専用プロパティ `attributeNamespace` は、MutationObserver によって監視されている MutationRecord 内の、変更された属性の名前空間です。 | 16 | 12 | 14 | 7 | 18 | 7 |
| MutationRecord の読み取り専用プロパティ `nextSibling` は、MutationObserver のターゲットに対して追加または削除された子ノードの、その直後の兄弟ノードを指します。 | 16 | 12 | 14 | 7 | 18 | 7 |
| MutationRecord の読み取り専用プロパティ oldValue には、変更される前のオブザーブされたノードの文字データまたは属性値が含まれます。 | 16 | 12 | 14 | 7 | 18 | 7 |
| MutationRecord の読み取り専用プロパティ `previousSibling` は、MutationObserver のターゲットに対して追加または削除された子ノードの、直前の兄弟ノードを指します。 | 16 | 12 | 14 | 7 | 18 | 7 |
| MutationRecord の読み取り専用プロパティ `removedNodes` は、MutationObserver によって検出された変更により、対象ノードから削除されたノードの NodeList です。 | 16 | 12 | 14 | 7 | 18 | 7 |
| MutationRecord の読み取り専用プロパティ target は、MutationObserver によって検出された変更(mutation)の対象(つまり、変更されたノード)です。 | 16 | 12 | 14 | 7 | 18 | 7 |
| MutationRecord の読み取り専用プロパティの型は、MutationObserver によって監視される MutationRecord の型です。 | 16 | 12 | 14 | 7 | 18 | 7 |
- ベンダープレフィックス付きで対応: WebKit (18)
- ベンダープレフィックス付きで対応: WebKit (6)
- ベンダープレフィックス付きで対応: WebKit (18)
- ベンダープレフィックス付きで対応: WebKit (6)
- ベンダープレフィックス付きで対応: WebKit (18)
- ベンダープレフィックス付きで対応: WebKit (6)
- ベンダープレフィックス付きで対応: WebKit (18)
- ベンダープレフィックス付きで対応: WebKit (6)
- Chrome 33 以前では、`attributeFilter` または `attributeOldValue` を使用する際、`attributes: true` を指定する必要があります。`attributes: true` が指定されていない場合、Chrome は構文エラーを発生させます。
- Edge 79 以前のバージョンでは、`attributeFilter` または `attributeOldValue` を使用する際、`attributes: true` を指定する必要があります。`attributes: true` が指定されていない場合、Edge は構文エラーを発生させます。
- Firefox 36 以前では、`attributeFilter` または `attributeOldValue` を使用する際、`attributes: true` を指定する必要があります。`attributes: true` が指定されていない場合、Firefox は構文エラーを発生させます。
- Safari 10.1 以前のバージョンでは、`attributeFilter` または `attributeOldValue` を使用する際、`attributes: true` を指定する必要があります。`attributes: true` が指定されていない場合、Safari は構文エラーを発生させます。
- Chrome Android 33 以前のバージョンでは、`attributeFilter` または `attributeOldValue` を使用する際、`attributes: true` を指定する必要があります。`attributes: true` が指定されていない場合、Chrome Android は構文エラーを発生させます。
- Safari iOS 10.3 以前では、`attributeFilter` または `attributeOldValue` を使用する際、`attributes: true` を指定する必要があります。`attributes: true` が指定されていない場合、Safari は構文エラーを発生させます。
基本構文
// Select the node that will be observed for mutations
const targetNode = document.getElementById("some-id");
// Options for the observer (which mutations to observe)
const config = { attributes: true, childList: true, subtree: true };
// Callback function to execute when mutations are observed
const callback = (mutationList, observer) => {
for (const mutation of mutationList) {
if (mutation.type === "childList") {
console.log("A child node has been added or removed.");
} else if (mutation.type === "attributes") {
console.log(`The ${mutation.attributeName} attribute was modified.`);
}
}
};
// Create an observer instance linked to the callback function
const observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
observer.observe(targetNode, config);
// Later, you can stop observing
observer.disconnect(); 実務での使いどころ
-
MutationObserver の活用
MutationObserver インターフェイスは、 DOM ツリーへ変更が加えられたことを監視することができる機能を提供します。
注意点
- 古いブラウザでは対応していない場合がある。
実装メモ
- 一部の API はセキュアコンテキスト (HTTPS) やユーザー操作起点を必要とする。利用前に要件を確認すること。