23

我需要拦截网页内单元格内容的任何更改。

以下代码显示 addEventListener 不起作用。

function modifyText() {
alert("!");
}

var el=document.getElementById("mycell");
el.innerHTML="a"
el.addEventListener("change", modifyText, false); 
// After next instruction I expect an alert message but it does not appear...
el.innerHTML="Z";

该代码只是一个玩具示例。在我的真实案例中,页面(以及单元格中)的更改是由我无法控制的 web 应用程序进行的。

4

3 回答 3

19

有一种现代方法可以捕捉 innerhtml 的变化:

https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/observe

例子:

// identify an element to observe
elementToObserve = window.document.getElementById('y-range').children[0];

// create a new instance of 'MutationObserver' named 'observer', 
// passing it a callback function
observer = new MutationObserver(function(mutationsList, observer) {
    console.log(mutationsList);
});

// call 'observe' on that MutationObserver instance, 
// passing it the element to observe, and the options object
observer.observe(elementToObserve, {characterData: false, childList: true, attributes: false});

childList 突变在 innerHTML 更改时触发。

于 2020-05-18T09:20:54.707 回答
9

你不能那样收听 DOM 元素changechange活动主要针对inputs

还有一些其他新的 DOM 3 事件可以帮助您解决这个问题。

这里有一些:

DOMCharacterDataModified //草稿

DOMSubtreeModified

于 2011-09-11T21:22:16.113 回答
1

是检测/监控 DOM 变化的最有效方法吗?帮助?

似乎没有任何 100% 跨浏览器解决方案,解决方法之一是轮询感兴趣的元素以查看它们的 innerHTML.length 是否发生变化!

于 2011-09-11T21:22:55.690 回答