2

我通过一些 js 库操作了网页 DOM,这些库改变了 和 的行为onMouseup onMousedownonMousemove以及其他一些我无法确定的事情。

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

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

我对此的天真尝试:

var initial_state = document
document = initial_state

你猜怎么着?它没有用......所以......我需要知道什么,我怎样才能做到正确?

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

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

4

1 回答 1

1

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

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

如果您使用 jQuery,您可以使用扩展功能进行克隆

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

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

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

如何正确克隆 JavaScript 对象?

于 2013-10-03T02:50:46.027 回答