我需要一种有效的机制来检测对 DOM 的更改。最好是跨浏览器,但如果有任何不是跨浏览器的有效方法,我可以使用故障安全的跨浏览器方法来实现这些。
特别是,我需要检测会影响页面文本的更改,因此需要任何新的、已删除或修改的元素,或对内部文本 (innerHTML) 的更改。
我无法控制所做的更改(它们可能是由于包含 3rd 方 javascript 等),因此无法从这个角度进行处理 - 我需要以某种方式“监控”更改。
目前我已经实现了一个“quick'n'dirty”方法,它body.innerHTML.length
会定期检查。这当然不会检测到导致返回相同长度的更改,但在这种情况下“足够好” - 发生这种情况的可能性非常小,并且在这个项目中,无法检测到更改不会导致在丢失的数据中。
问题body.innerHTML.length
是它很贵。在快速浏览器上可能需要 1 到 5 毫秒,这会使事情陷入困境——我还要处理大量的 iframe,所有这些都加起来了。我很确定这样做的代价是因为 innerHTML 文本不是由浏览器静态存储的,并且每次读取时都需要从 DOM 中计算出来。
我正在寻找的答案类型是从“精确”(例如事件)到“足够好”的任何类型 - 可能像 innerHTML.length 方法一样“快速'n'dirty”,但执行速度更快。
编辑:我还应该指出,虽然检测已修改的精确元素会“很好”,但这并不是绝对必要的——只要有任何变化就足够了。希望这能扩大人们的反应。我将研究 Mutation Events,但我仍然需要 IE 支持的后备,所以任何古怪的、有创意的、不合常规的想法都会受到欢迎。