我通过一些js库操纵了一个网页DOM,这些库改变了onMouseup
onMousedown
和onMousemove
的行为,以及我无法确定的其他内容。
使用DOM检查器我可以看到其中一些更改被设置为主“文档”对象的属性。
所以,我想弄清楚的是一种方法来存储,当页面加载时,“文档”对象的初始状态(或者可能存储整个DOM?)以便稍后我将能够恢复它。
我天真的尝试:
var initial_state = document
document = initial_state
猜猜是什么?它不起作用......那么......我需要知道什么,我该怎么做呢?
UPDATE :我现在知道java赋值是通过引用而不是值,所以现在我正在尝试使用.extend(),但这个问题的主要观点是无论如何,我将能够在初始阶段(收到页面时)保存DOM的完整状态,然后再次恢复它。完全状态我的意思是html,javascript状态,对象属性和方法,这样当你恢复它时,DOM与你第一次收到的DOM完全相同。
我知道这可能很困难,可能需要特定于案例的代码与javascript代码状态的复杂性成正比。但它会有所帮助,如果我能在最简单的情况下以正确的方式看到至少一个代码示例,我将非常感激(如在我的问题示例案例中,您收到一些html和一些js更改整个文档的onMousedown默认值。)
答案 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中克隆对象的相关问题。