このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

MutationRecord: target プロパティ

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2015年7月以降、すべてのブラウザーで利用可能です。

MutationRecord の読み取り専用プロパティ target は、MutationObserver で観測された変更の対象 (すなわち、変更されたノード) です。

変更の影響を受けた Node です。

  • レコードの typeattributes のときは、属性が変更された Element です。
  • レコードの typecharacterData のときは、対象の CharacterData ノードです。
  • レコードの typechildList のときは、子ノードが変更された Node です。

変更の対象を記録する

以下の例では、コンテナー div #container の中に赤 div (#red-div) と青 div (#blue-div) の 2 個の div があります。このコンテナーを観測する MutationObserver を作成します。このオブザーバーは子のリストへの変更を観測し、subtree: true をつけてあるのでコンテナーの子ノードの子ノードの変化も観測します。

このオブサーバーのコールバックは、変更の target を記録します。#red-div#blue-div にノードを追加すると、それに応じて target#red-div#blue-div になります。

HTML

html
<pre id="log">変更の対象:</pre>
<button id="add-nodes-to-red-div">赤 div にノードを追加</button>
<button id="add-nodes-to-blue-div">青 div にノードを追加</button>
<button id="reset">リセット</button>
<div id="container">
  <div id="red-div"></div>
  <div id="blue-div"></div>
</div>

JavaScript

js
const container = document.querySelector("#container");
const redDiv = document.querySelector("#red-div");
const blueDiv = document.querySelector("#blue-div");
const addToRed = document.querySelector("#add-nodes-to-red-div");
const addToBlue = document.querySelector("#add-nodes-to-blue-div");
const reset = document.querySelector("#reset");
const log = document.querySelector("#log");

addToRed.addEventListener("click", () => {
  const newPara = document.createElement("p");
  newPara.textContent = `現在時刻: ${Date.now()}`;
  redDiv.appendChild(newPara);
});

addToBlue.addEventListener("click", () => {
  const newPara = document.createElement("p");
  newPara.textContent = `現在時刻: ${Date.now()}`;
  blueDiv.appendChild(newPara);
});

reset.addEventListener("click", () => self.location.reload());

function logMutationTarget(records) {
  for (const record of records) {
    log.textContent = `変更の対象: ${record.target.id}`;
  }
}

const observer = new MutationObserver(logMutationTarget);
observer.observe(container, { childList: true, subtree: true });

結果

仕様書

仕様書
DOM
# ref-for-dom-mutationrecord-target②

ブラウザーの互換性