[3] [[節点]]の[DFN[[RUBYB[変異]@en[mutation]]]]とは、次のような操作による[[節点木]]の変化をいいます。

[FIG(short list)[
- [[挿入]]
- [[削除]]
- [[属性の変更]]
- [[属性の削除]]
]FIG]

* 文脈

[15] [[変異]]や、[[節点]]の生成に関する操作h、
次のものを含む様々な [[DOM API]] 等により行われます。

[FIG(short list)[
- [[構文解析器]]
- [CODE(DOMm)@en[createElement]]
- [CODE(DOMm)@en[createDocument]]
- [CODE(DOMm)@en[appendChild]]
- [CODE(DOMm)@en[insertBefore]]
- [CODE(DOMm)@en[replaceChild]]
- [CODE(DOMm)@en[removeChild]]
- [CODE(DOMm)@en[cloneNode]]
- [CODE(DOMm)@en[setAttribute]]
- [CODE(DOMm)@en[removeAttribute]]
- [[反映]]する[[IDL属性]]
]FIG]

[21] [[著者]]の[[スクリプト]]のみならず、[[ブラウザー拡張]]や [[WebDriver]]、
[[開発者ツール]]などから操作されることもあります。

[16] 次のような[[利用者]]の操作により変更されることもあります。
[FIG(list)[
- [[編集ホスト]]での編集
- [CODE(HTMLe)@en[details]] の表示状態の変更
- [CODE(HTMLe)@en[textarea]] の表示サイズの変更
]FIG]

[4] [[仕様書]]上に必ずしも明確な規定があるわけではありませんが、
[[利用者]]の操作や[[ブラウザー拡張]]等に基づく変更であっても、
副作用が適切に発生するよう、相当する [[DOM Standard]] の規定する操作が行われたものとして扱う必要があります。

[5] [[カスタム要素反応]]に関しては、[[バックアップ要素キュー]]を用いるとの規定があります。

* 副作用

[1] [[節点]]の[[変異]]にあっては、それに連動して色々な動作が起こります。

[FIG(list)[
- 同期的に動作するもの
-- [[挿入手順群]]、[[削除手順群]]、[[属性変更手順群]]
-- [[live]] [[collection]] ([CODE(DOMi)@en[[[NodeList]]]], [CODE(DOMi)@en[[[HTMLCollection]]]], [CODE(DOMi)@en[[[NamedNodeMap]]]] など) の更新
-- [CODE(DOMi)@en[[[NodeIterator]]]] の更新
-- [CODE(DOMi)@en[[[Range]]]] の更新
-- [CODE(DOMi)@en[[[XPathResult]]]] の無効化
-- [[カスタム要素反応]]
-- [[mutation event]]
- [[event loop]] の次のタイミングで動作するもの
-- [CODE(DOMi)@en[[[MutationObserver]]]]
-- [[レンダリング]]の更新
-- [[CSSOM]] の読み込み (外部の[[スタイル・シート]]を[[輸入]]している場合)
]FIG]

;; [2] [CODE(DOMi)@en[[[TreeWalker]]]] は影響を受けません。

* 観測

[6] [[著者]]の[[スクリプト]]は、[[変異観察器]]を登録することにより、
[[節点木]]に[[変異]]があった際に[[コールバック関数の呼び出し]]を受けることができます。

[HISTORY[
[7] かつては[[変異イベント]]が使われました。
]HISTORY]

