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