【发布时间】:2021-04-06 15:53:44
【问题描述】:
我想监控完整的 HTML 以进行以下更改:
- 每当标签中的“文本”发生变化时
- 每当添加标签中的“文本”时
- 每当添加带有“文本”的新标签时
所以,我只想监视 DOM 中的文本更改。可能是因为添加了带有一些文本的新节点,可能是因为某些现有标签中的文本从 a 更改为 b,或者可能是因为在其他空标签 <h1></h1> --> <h1>hello</h1> 中添加了文本
我怎么能这样做?我尝试了 MutationObserver,但我发现它非常混乱,我无法正确使用它。我想检测新添加的文本并通过转换函数对其进行转换。比如,
<span>apple</span>
被添加,它将被转换为:
const transformedText = transform("apple");
// update the text
<span>transformedText</span>
这是我尝试过的:
const config = {
attributes: false,
childList: true,
subtree: true,
characterData: true,
characterDataOldValue: true
};
const callback = function (mutationsList, observer) {
// Use traditional 'for loops' for IE 11
const dict = transformDictionary();
for (const mutation of mutationsList) {
if (mutation.type === "childList") {
for (const node of mutation.addedNodes) {
if (node.setAttribute) {
// TRANSFORM
}
}
if (mutation.target) {
// TRANSFORM
}
} else if (mutation.type === "characterDataOldValue") {
console.log(mutation);
} else if (mutation.type === "characterData") {
}
}
};
const o = new MutationObserver(callback).observe(document.body, config);
但是对于不是文本节点的节点,似乎有很多触发器。例如,一个节点也会收到一个触发器,例如这个完整的div:
<div>
wow
<div>
ok
<p>
<span>hello</span>
</p>
</div>
</div>
我怎样才能做到这一点?
【问题讨论】:
标签: javascript html dom mutation-observers