Я управлял DOM веб-страницы с помощью некоторых js-библиотек, которые изменили поведение onMouseup
onMousedown
и onMousemove
, среди прочего, в чем я не могу быть уверен.
Используя инспектор DOM, я мог видеть, что некоторые из этих изменений устанавливаются как свойства объекта main «документ».
Итак, то, что я пытаюсь выяснить, - это способ сохранить, когда страница загружена, начальное состояние объекта «документ» (или, возможно, сохранить всю DOM?), Чтобы позже я смог восстановить его.
Моя наивная попытка:
var initial_state = document
document = initial_state
Угадай, что? Не получилось ... Итак ... что мне нужно знать и как я могу это сделать правильно?
ОБНОВЛЕНИЕ : теперь я знаю, что присвоение java осуществляется по ссылке, а не по значениям, поэтому теперь я экспериментирую с .extend (), но основной смысл этого вопроса заключается в том, является ли означает, что я смогу сохранить полное состояние модели DOM на ее начальном этапе (при получении страницы), а затем восстановить его во второй раз. Под полным состоянием я подразумеваю html, состояние javascript, свойства и методы объекта, чтобы при его восстановлении DOM была точно такой же, как та, которую вы получили в первый раз.
Я понимаю, что это может быть сложно и может потребоваться код для конкретного случая, прямо пропорциональный сложности состояния кода javascript . Но это помогло бы, и я был бы чрезвычайно благодарен, если бы я мог увидеть хотя бы пример кода, чтобы сделать это правильно в простейшем из случаев (как в моем примере вопроса, где вы получаете некоторый html и только некоторые js, которые меняются значения по умолчанию для onMousedown для всего документа).
1 ответ
Поскольку как работает JavaScript (объекты не копируются, а передаются по ссылке) initial_state
var только что сохранил ссылку на документ DOM. Когда документ DOM обновляется, ваша переменная initial_state
отразит эти изменения, потому что это просто ссылка, которая просто указывает на документ DOM, а не объект «сам по себе».
Чтобы получить копию объекта, который является «реальным» объектом, а не просто ссылкой на первый объект, вам необходимо клонировать .
Если вы используете jQuery, вы можете клонировать его с помощью функции расширения
// for simple cloning
var initDoc = $.extend({}, document);
// for deep cloning
var initDocument = $.extend(true, {}, document);
Если вы не заинтересованы в использовании jQuery.extend (), ознакомьтесь с этим связанным вопросом о клонировании объекта в JavaScript.
Как правильно клонировать объект JavaScript?
initDocument = $.extend(true, {}, document);
как мне позже восстановить документ DOM? Что мне делать: document = $.extend({}, initDocument);
? Поскольку это было глубокое клонирование, клонировало ли оно также все дочерние элементы документа DOM, то есть, на самом деле, всю страницу?
document = initDocument
для восстановления объекта DOM. Не DOM страниц.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.
.clone
для коллекций jQuery, вам понадобится$.extend