是否可以判断DOM是否被修改,以及哪个部分?

问题描述:

如果知道它将被修改,是否有任何实际的方法可以说明DOM的哪部分已被修改?是否可以判断DOM是否被修改,以及哪个部分?

我正在写一个插件,将与JavaScript一起运行,我没有写。在修改DOM之前会触发一个事件,修改后会触发一个事件。我的工作是决定发生了什么变化。这是可能的,如果是的话,这样做最不可怕的方式是什么?

+0

这是一个有趣的问题。没有好的方式,也没有体面的方式。我的第一个想法是在“更改前”事件中复制所有dom对象,然后在“更改后”事件中将当前dom对象与您制作的副本进行比较。如果您有一个可以更改的dom对象的已知列表,并且您预期的更改次数有限,则此选项是合理的。即使这是一个丑陋的解决方案,也不会推荐它,但它是首先想到的。 – Jay 2010-03-24 17:49:14

+1

您可以编写代码来计算每个节点上子DOM的聚合哈希值(根据您在DOM中关心的任何内容)。重要的是每个节点的散列是节点*和*子树的函数。然后,您可以通过首先检查哈希代码是否已更改来跟踪更改。 – Pointy 2010-03-24 17:57:04

+0

感谢您的回复。 – mkoryak 2010-03-24 18:58:39

这是不可能在任何实用的方式

+0

除了IE 2011-05-01 23:53:59

如果您知道要修改DOM元素的哪个方面,则可以在页面加载时将该属性的值存储在每个元素的.data()节点中,然后在脚本运行后进行比较。

根据您需要的浏览器支持,您可以使用DOM mutation events

您也可以对页面文本(例如完整源字符串)进行散列并将其与当前散列进行比较(在更改时)。

使用jquery,你可以触发:动画过滤器来搜索被动画的元素,我不知道你是否会在这些事件之间有如此之多的延迟,但是如果在初始变换时主触发器刚好在变换时触发发起你可以尝试捕捉:动画元素和捕捉初始状态结束动画之前,然后在结束捕捉状态和比较,它只有一个提示我没有任何示范或方式来重现您的工作环境,但我希望这个指导方针可以给你是个想法。