我需要一个有效的机制来检测DOM的变化。最好是跨浏览器,但如果有任何有效的手段,而不是跨浏览器,我可以实现这些与一个故障安全跨浏览器方法。检测/监测DOM变化的最有效方法?
特别是,我需要检测会影响页面上文本的更改,因此需要任何新的,删除或修改的元素,或更改内部文本(innerHTML)。
我无法控制所做的更改(它们可能是由于第三方JavaScript包括等),所以无法从这个角度来处理 - 我需要以某种方式“监视”更改。
目前我实施了一个“quick'n'dirty”方法,每隔一段时间检查body.innerHTML.length
。这当然不会检测到导致返回相同长度的变化,但在这种情况下“足够好” - 发生这种情况的可能性非常小,并且在该项目中,未能检测到变化将不会导致丢失数据。
body.innerHTML.length
的问题是它很贵。在快速浏览器上,它可能需要1到5毫秒的时间,这可能会让事情变得很糟糕 - 我也在处理大量的iframe,并且这些都会加起来。我很确定这样做的代价很大,因为innerHTML文本不是由浏览器静态存储的,每次读取时都需要从DOM中计算。
我正在寻找的答案类型是从“精确”(例如事件)到“足够好”的任何内容 - 可能与innerHTML.length方法一样,是“quick'n'dirty”,但是执行得更快。
编辑: 我还要指出的是,虽然这将是“好”来检测已被修改的精确元素,它不是绝对必要的 - 只是一个事实,即出现了任何变化是够好了。希望这可以扩大人们的反应。我要去调查突变事件,但我仍然需要IE支持的后备,所以任何拙劣的,有创意的,不寻常的想法都会受到欢迎。
上次这个问题没有太多运气:http://stackoverflow.com/questions/648996/how-do-i-monitor-the-dom-for-changes – 2010-03-16 20:01:49
是的,我看到了,你是对...没有太多的运气。 *但是*,因为我不需要100%的准确性,也因为我不需要指出哪个元素已经改变,只是*有*改变,我希望人们想出一些创造性的解决方案对我来说... – Graza 2010-03-17 10:31:51
[是否有JavaScript/jQuery DOM更改侦听器?](https://stackoverflow.com/questions/2844565/is-there-a-javascript-jquery-dom-change-listener) – Makyen 2017-10-28 09:21:25