blob: b4cfeb514bda2d58a8c5407688df2dfb988bebf3 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
|
---
title: MutationObserver
slug: Web/API/MutationObserver
tags:
- API
- Advan
- DOM
- DOM Reference
- NeedsContent
- NeedsUpdate
- Reference
translation_of: Web/API/MutationObserver
---
<p>{{APIRef("DOM WHATWG")}}</p>
<p><code>MutationObserver</code> とは、指定したコールバック関数を <a href="/ja/docs/DOM">DOM</a> の変更時に実行させる API です。この API は、DOM3 Events の仕様で定義されていた <a href="https://developer.mozilla.org/ja/docs/Web/Guide/Events/Mutation_events">Mutation Events</a> を新しく設計し直したものです。</p>
<p>{{英語版章題("Constructor")}}</p>
<h2 id="Constructor" name="Constructor">コンストラクタ</h2>
<h3 id="MutationObserver()" name="MutationObserver()"><code>MutationObserver()</code></h3>
<p>DOM の変更を検知するオブザーバを生成します。</p>
<pre>MutationObserver(
function callback
);
</pre>
<h6 id="Parameters" name="Parameters">引数</h6>
<dl>
<dt><code>callback</code></dt>
<dd>DOM の変更時に呼び出される関数です。この関数は第 1 引数に {{domxref("MutationRecord")}} の配列を、第 2 引数に <code>MutationObserver</code> インスタンス自身を受け取ります。</dd>
</dl>
<p>{{英語版章題("Instance medhods")}}</p>
<h2 id="Instance_methods" name="Instance_methods">インスタンスメソッド</h2>
<table class="standard-table">
<tbody>
<tr>
<td><code>void <a href="#observe()">observe</a>( {{domxref("Node")}} target, <a href="#MutationObserverInit">MutationObserverInit</a> options );</code></td>
</tr>
<tr>
<td><code>void <a href="#disconnect()">disconnect</a>();</code></td>
</tr>
<tr>
<td><code>Array <a href="#takeRecords()">takeRecords</a>();</code></td>
</tr>
</tbody>
</table>
<div class="note">
<p><strong>補足</strong>: 引数 {{domxref("Node")}} target は <a href="https://nodejs.org/">NodeJS</a> と関係ありません。</p>
</div>
<h3 id="observe()" name="observe()"><code>observe()</code></h3>
<p>DOM の変更を検知したいノードを指定し、<code>MutationObserver</code> インスタンスを紐づけます。</p>
<pre>void observe(
{{domxref("Node")}} target,
<a href="#MutationObserverInit"><code>MutationObserverInit</code></a> options
);
</pre>
<h6 id="Parameters" name="Parameters">引数</h6>
<dl>
<dt><code>target</code></dt>
<dd>DOM の変更を検知したい {{domxref("Node")}}</dd>
<dt><code>options</code></dt>
<dd>取得したい変更の種類を指定する <a href="#MutationObserverInit"><code>MutationObserverInit</code></a> オブジェクト</dd>
</dl>
<div class="note">
<p><strong>補足</strong>: MutationObserver インスタンスと対象ノードを変えずに observe() を 2 回実行しても、コールバックは 1 回だけ呼び出され、また disconnect() を 2 回呼び出す必要もありません(addEventListener と同様)。しかし、別の MutationObserver インスタンスであれば、同じノードに別のオブザーバが追加されます。</p>
</div>
<h3 id="disconnect()" name="disconnect()"><code>disconnect()</code></h3>
<p><code>MutationObserver</code> インスタンスを対象ノードから解除します。同じインスタンスで <a href="#observe()"><code>observe()</code></a> メソッドを再度呼び出すまで、オブザーバのコールバック関数は実行されません。</p>
<pre>void disconnect();
</pre>
<h3 id="takeRecords()" name="takeRecords()"><code>takeRecords()</code></h3>
<p>コールバック関数へ渡される {{domxref("MutationRecord")}} のキューを空にし、キューに入っていた値を返します。</p>
<pre>Array takeRecords();
</pre>
<h6 id="Return_value" name="Return_value">戻り値</h6>
<p>{{domxref("MutationRecord")}} の配列。</p>
<h2 id="MutationObserverInit" name="MutationObserverInit"><code>MutationObserverInit</code></h2>
<p><code>MutationObserverInit</code> は以下のプロパティを指定できるオブジェクトです。</p>
<table class="standard-table">
<tbody>
<tr>
<td class="header">プロパティ</td>
<td class="header">意味</td>
</tr>
<tr>
<td><code>childList</code></td>
<td>対象ノードの子ノード(テキストノードも含む)に対する追加・削除を監視する場合は <code>true</code> にします。</td>
</tr>
<tr>
<td><code>attributes</code></td>
<td>対象ノードの属性に対する変更を監視する場合は <code>true</code> にします。</td>
</tr>
<tr>
<td><code>characterData</code></td>
<td>対象ノードのデータに対する変更を監視する場合は <code>true</code> にします。</td>
</tr>
<tr>
<td><code>subtree</code></td>
<td>対象ノードとその子孫ノードに対する変更を監視する場合は <code>true</code> にします。</td>
</tr>
<tr>
<td><code>attributeOldValue</code></td>
<td>対象ノードの変更前の属性値を記録する場合は <code>true</code> にします(<code>attributes</code> が <code>true</code> の時に有効)。</td>
</tr>
<tr>
<td><code>characterDataOldValue</code></td>
<td>対象ノードの変更前のデータを記録する場合は <code>true</code> にします(<code>characterData</code> が <code>true</code> の時に有効)。</td>
</tr>
<tr>
<td><code>attributeFilter</code></td>
<td>すべての属性の変更を監視する必要がない場合は、(名前空間を除いた)属性ローカル名の配列を指定します。</td>
</tr>
</tbody>
</table>
<p>{{英語版章題("Example usage")}}</p>
<h2 id="Example_usage" name="Example_usage">使用例</h2>
<p>以下の例は <a class="external" href="http://hacks.mozilla.org/2012/05/dom-mutationobserver-reacting-to-dom-changes-without-killing-browser-performance/" rel="freelink">このブログ記事</a> を参考にしたものです。</p>
<pre class="brush: js">// 対象とするノードを取得
const target = document.getElementById('some-id');
// オブザーバインスタンスを作成
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
console.log(mutation.type);
});
});
// オブザーバの設定
const config = { attributes: true, childList: true, characterData: true };
// 対象ノードとオブザーバの設定を渡す
observer.observe(target, config);
// 後ほど、監視を中止
observer.disconnect();
</pre>
<p>{{英語版章題("Additional reading")}}</p>
<h2 id="Additional_reading" name="Additional_reading">関連情報</h2>
<ul>
<li><a class="external" href="http://updates.html5rocks.com/2012/02/Detect-DOM-changes-with-Mutation-Observers" rel="freelink">簡単な概要</a></li>
<li><a class="external" href="http://hacks.mozilla.org/2012/05/dom-mutationobserver-reacting-to-dom-changes-without-killing-browser-performance/" rel="freelink">より詳細な議論</a></li>
<li><a class="external" href="http://www.youtube.com/watch?v=eRZ4pO0gVWw" rel="freelink">Chromium の開発者 Rafael Weinstein 氏によるスクリーンキャスト</a></li>
<li><a class="external" href="http://code.google.com/p/mutation-summary/" rel="freelink">ライブラリ "mutation-summary"</a></li>
</ul>
<p>{{英語版章題("Specifications")}}</p>
<h2 id="Specifications" name="Specifications">仕様</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">仕様書</th>
<th scope="col">策定状況</th>
<th scope="col">備考</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('DOM WHATWG', '#mutationobserver', 'MutationObserver')}}</td>
<td>{{ Spec2('DOM WHATWG') }}</td>
<td> </td>
</tr>
</tbody>
</table>
<p>{{英語版章題("Browser compatibility")}}</p>
<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザ実装状況</h2>
<p>{{Compat("api.MutationObserver")}}</p>
<article class="approved text-content">
<div class="boxed translate-rendered">
<div id="compat-desktop"> </div>
</div>
</article>
|