Web APIのMutationObserverを試しているのですが、ある要素のテキストの変更の監視が上手く出来ません。
以下が試してみたコードなのですが、なぜ、最後の3行のはどれも値自体はページ上で変更を確認できるのに、通知が来ないのでしょうか?
characterData
をtrue
にしているので大丈夫かなと思ったのですが、上手くいきません。
HTML
1<div id="test">TEST</div>
JavaScript
1const target = document.getElementById('test'); 2 3const observer = new MutationObserver((mutations) => { 4 mutations.forEach((mutation) => { 5 console.log(mutation.type); 6 }); 7}); 8 9const config = { attributes: true, childList: true, characterData: true }; 10 11observer.observe(target, config); 12 13// (OK!) このように変更するとlogにattributesと出た 14// target.className = "aaa"; 15 16// (OK!) このように変更するとlogにchildListと出た 17//target.innerHTML = "ddd"; 18//target.textContent = "555"; 19// target.innerText = "aaa"; 20 21// (質問) これらのいずれかを有効にすれば、どれでもテキストは変わる。 22// しかし、ログに何も出力されないのは何故? 23 24// target.childNodes[0].textContent = "ddd"; 25// target.childNodes[0].nodeValue = "ddd";
解決後の報告
監視対象をテキストノードにすることで、最後の部分でログ出力の結果がcharacterData
となりました。
const target = document.getElementById('test').childNodes[0]; const observer = new MutationObserver((mutations) => { mutations.forEach((mutation) => { console.log(mutation.type); }); }); const config = { attributes: true, childList: true, characterData: true }; observer.observe(target, config); target.textContent = "eee"; // "characterData"

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/10 07:11
2018/04/10 07:17
2018/04/10 07:19
2018/04/10 07:23