突变观察者不检测文本变化
Mutation Observer Not Detecting Text Change
我抓挠我的头,为什么MutationObserver不检测文本更改使用textContent。
HTML
<div id="mainContainer">
<h1>Heading</h1>
<p>Paragraph.</p>
</div>
JavaScript function mutate(mutations) {
mutations.forEach(function(mutation) {
alert(mutation.type);
});
}
jQuery(document).ready(function() {
setTimeout(function() {
document.querySelector('div#mainContainer > p').textContent = 'Some other text.';
}, 2000);
var target = document.querySelector('div#mainContainer > p')
var observer = new MutationObserver( mutate );
var config = { characterData: true, attributes: false, childList: false, subtree: true };
observer.observe(target, config);
});
在上面的脚本中,段落元素的文本内容明显改变了,但是MutationObserver没有检测到。
但是,如果你将textContent更改为innerHTML,你会被提醒"characterData"已经更改。
为什么MutationObserver检测innerHTML而不是textContent?
这是JS的小提琴:
https://jsfiddle.net/0vp8t8x7/请注意,只有当您将textContent更改为innerHTML时才会收到警告。
这是因为textContent
触发的变化与innerHTML
不同,并且您的观察者配置没有配置为观察textContent
所做的变化。
textContent
改变目标的子文本节点。根据MDN设置textContent
:
在节点上设置此属性将删除其所有子节点和将它们替换为具有给定值的单个文本节点。
当innerHTML
改变元素本身和它的子树时
所以要捕获innerHTML
,您的配置应该是:
var config = { characterData: true, attributes: false, childList: false, subtree: true };
当捕获textContent
时使用:
var config = { characterData: false, attributes: false, childList: true, subtree: false };
演示:function mutate(mutations) {
mutations.forEach(function(mutation) {
alert(mutation.type);
});
}
setTimeout(function() {
document.querySelector('div#mainContainer > p').textContent = 'some other text.';
}, 1000);
var target = document.querySelector('div#mainContainer > p')
var observer = new MutationObserver( mutate );
var config = { characterData: false, attributes: false, childList: true, subtree: false };
observer.observe(target, config);
<div id="mainContainer">
<h1>Heading</h1>
<p>Paragraph.</p>
</div>
相关文章:
- 当文本不断变化时,如何避免在按钮内移动文本
- 防止文本区域的大小发生变化
- 如何将(a*b)两个输入文本值相乘,并在javascript中随文本变化动态显示
- 如何通过道场检测文本区域的变化
- 提交表单后,文本框中的日期会发生变化
- 检测按钮单击时值更改的文本框值的变化
- Javascript 不会检查文本输入值是否随组合网格而变化
- JavaScript 文本随时间来回变化(例如:1,2,3,2,1,2,3,2,1,2,3..)
- JavaScript:当用户用鼠标选择文本时,观察文本选择长度的变化
- 如何在网站上制作动画,每秒钟就会有一段文本发生变化
- 与图像幻灯片放映相对应的文本颜色变化
- 使用angularjs ng表根据特定条件使文本的颜色发生变化
- 立即检测输入[类型=“文本”]的变化
- 根据动态变化的变量(KineticJS)更改文本或颜色
- 如何在另一个文本框的值发生变化时更新文本框的值
- 如何在两个不断变化的字符串之间选择中间文本
- 文本区域-当用户编辑文本区域的内容时,文本颜色会发生变化
- 如何重载下拉下拉每个单选按钮上的变化和日期文本框的变化
- 突变观察者不检测文本变化
- jQuery文本变化顺利