如何将DOM状态重置为初始状态(首次收到页面时?)

时间:2013-10-03 02:43:15

标签: javascript dom state domdocument

我通过一些js库操纵了一个网页DOM,这些库改变了onMouseup onMousedownonMousemove的行为,以及我无法确定的其他内容。

使用DOM检查器我可以看到其中一些更改被设置为“文档”对象的属性。

所以,我想弄清楚的是一种方法来存储,当页面加载时,“文档”对象的初始状态(或者可能存储整个DOM?)以便稍后我将能够恢复它。

我天真的尝试:

var initial_state = document
document = initial_state
猜猜是什么?它不起作用......那么......我需要知道什么,我该怎么做呢?

UPDATE :我现在知道java赋值是通过引用而不是值,所以现在我正在尝试使用.extend(),但这个问题的主要观点是无论如何,我将能够在初始阶段(收到页面时)保存DOM的完整状态,然后再次恢复它。完全状态我的意思是html,javascript状态,对象属性和方法,这样当你恢复它时,DOM与你第一次收到的DOM完全相同。

我知道这可能很困难,可能需要特定于案例的代码与javascript代码状态的复杂性成正比。但它会有所帮助,如果我能在最简单的情况下以正确的方式看到至少一个代码示例,我将非常感激(如在我的问题示例案例中,您收到一些html和一些js更改整个文档的onMousedown默认值。)

1 个答案:

答案 0 :(得分:1)

因为JavaScript如何工作(对象不被复制但通过引用传递)initial_state var刚刚存储了对DOM文档的引用。更新DOM文档时,initial_state var将反映这些更改,因为它只是指向DOM文档的引用,而不是“单独”的对象。

要获取作为“真实”对象的对象的副本而不仅仅是对第一个对象的引用,您需要克隆

如果您使用jQuery,则可以使用extend function

进行克隆
// for simple cloning
var initDoc = $.extend({}, document);

// for deep cloning
var initDocument = $.extend(true, {}, document);

如果您对使用jQuery.extend()不感兴趣,请查看有关JavaScript中克隆对象的相关问题。

How do I correctly clone a JavaScript object?