Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否可以判断DOM是否被修改,以及修改的部分是什么?_Javascript_Jquery_Events_Dom - Fatal编程技术网

Javascript 是否可以判断DOM是否被修改,以及修改的部分是什么?

Javascript 是否可以判断DOM是否被修改,以及修改的部分是什么?,javascript,jquery,events,dom,Javascript,Jquery,Events,Dom,如果您知道DOM的哪一部分将被修改,那么有什么实用的方法可以告诉您它被修改了吗 我正在编写一个插件,它将与我没有编写的javascript一起运行。修改DOM之前会触发一个事件,修改之后会触发一个事件。我的工作是决定改变了什么。这可能吗?如果可能的话,最不可怕的方法是什么?如果您知道要修改DOM元素的哪个方面,则可能是将该属性的值存储在页面加载时每个元素的.data()节点中,然后在脚本运行后进行比较。取决于您需要的浏览器支持,您可以使用。您还可以对页面文本(例如,完整的源字符串)进行散列,并将

如果您知道DOM的哪一部分将被修改,那么有什么实用的方法可以告诉您它被修改了吗


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

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

取决于您需要的浏览器支持,您可以使用。

您还可以对页面文本(例如,完整的源字符串)进行散列,并将其与当前散列进行比较。

使用jquery,您可以触发:动画过滤器来搜索正在设置动画的元素,我不知道这类事件之间是否会有这么大的延迟,但如果初始转换的主触发器在转换启动时被触发,您可以尝试捕获:动画元素并在结束动画之前捕获初始状态,然后在结束捕获状态并进行比较,这只是一个提示,我没有任何演示或方法来重现您的工作环境,但我希望本指南能给您一个想法。

这在任何实际方式下都是不可能的。这是一个有趣的问题。没有好办法,也没有像样的办法。我的第一个想法是在“更改前”事件中复制所有dom对象,然后在“更改后”事件中将当前dom对象与已复制的对象进行比较。如果您有一个可以更改的dom对象的已知列表,并且预期的更改数量有限,那么这个选项是合理的。即使这样,这是一个丑陋的解决方案,也不推荐,但这是首先想到的。您可以编写代码来计算每个节点上子DOM的聚合哈希值(基于您在DOM中关心的任何内容)。每个节点上的散列都是节点和子树的函数,这一点很重要。然后,您可以通过首先检查哈希代码是否已更改来跟踪更改。您希望在什么结构中看到更改的DOM?一根绳子?[新]顶级节点的数组?其子树被修改的最顶层节点?如果可能,请详细说明。任何格式。我认为最好是引用一个DOM节点,它是所有修改过的DOM节点的父节点(在树中尽可能低),很明显,您可以只返回文档,但这不会剪切它。除了IE之外,所有主要浏览器中的DOM变异事件都有可能