[英]Javascript Eventlistener for Update / Change on Element / innerText
是否有一个eventListener只检查innerText的更改?
例:
12345
我只想检查“12345”是否正在改变其他类似“23415”的内容。
没有“点击”事件会出现或其他任何事情。 我没有机会查看来自跨度更新的代码。 所以我真的只能从span元素的变化中获取事件但我没有任何线索如何。
抱歉我的英文不好,谢谢!
看看MutationObserver 。 使用它,您可以监听观察元素的characterData
。 例:
<span class="observable" contenteditable="true">12345</span>
var observables = document.querySelector('.observable');
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation);
});
});
var config = {characterData: true, subtree: true};
observer.observe(observables, config);
请注意, subtree
必须为true
因为文本实际上是被观察元素的子元素。
如果通过innerHTML
属性更新文本,则接受的答案可能不适用于所有浏览器。 在这种情况下,Firefox(截至28)将其视为childList
事件类型,而Chrome(截至33)将其视为characterData
事件类型。 我的猜测是Chrome检查正在更新的子节点是否是文本节点。
如果通过用户输入更新文本(如示例中的via contenteditable
,Firefox将触发characterData
突变事件。
总之,如果你想观察Javascript更新元素的innerHTML
,请确保将childList:true
添加到MutationObserverInit
对象以与Firefox兼容。
以防万一有人正在寻找一种方法来为多个节点执行此操作。 小提琴 进一步阅读
HTML
<span class="observable" contenteditable="true">13436</span>
<span class="observable" contenteditable="true">13235</span>
JS
var observables = document.querySelectorAll('.observable');
console.log(observables);
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log(mutation);
});
});
var config = {
characterData: true,
subtree: true
};
observables.forEach(function(node) {
observer.observe(node, config);
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.