Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.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在localstorage中添加标记?_Javascript_Local Storage_Web Storage - Fatal编程技术网

如何完全恢复已保存的<;部门>;使用javascript在localstorage中添加标记?

如何完全恢复已保存的<;部门>;使用javascript在localstorage中添加标记?,javascript,local-storage,web-storage,Javascript,Local Storage,Web Storage,在使用javascript将标记保存到本地存储后,我在还原标记时遇到问题 下面是我在localstorage中保存div标记的代码 function saveqform() { var parent = document.getElementById("questions"); console.log(parent); if (parent === undefined) { return; } else { localStorage

在使用javascript将标记保存到本地存储后,我在还原标记时遇到问题

下面是我在localstorage中保存div标记的代码

function saveqform() {
    var parent = document.getElementById("questions");
    console.log(parent);
    if (parent === undefined) {
        return;
    } else {
        localStorage.qtag = parent;
    }
}
function reloadqform() {
    console.log(localStorage.qid);
    console.log(localStorage.qtag);
    if (localStorage.qid === undefined || localStorage.qtag === undefined) {
        return;
    } else {
        $(document).ready(function() {
            var saved = localStorage.qtag;
            var parent = document.getElementById("element");
            parent.appendChild(saved);
        });
    }
}
下面是我从localstorage恢复div标记的代码

function saveqform() {
    var parent = document.getElementById("questions");
    console.log(parent);
    if (parent === undefined) {
        return;
    } else {
        localStorage.qtag = parent;
    }
}
function reloadqform() {
    console.log(localStorage.qid);
    console.log(localStorage.qtag);
    if (localStorage.qid === undefined || localStorage.qtag === undefined) {
        return;
    } else {
        $(document).ready(function() {
            var saved = localStorage.qtag;
            var parent = document.getElementById("element");
            parent.appendChild(saved);
        });
    }
}
不幸的是,上面的代码在从本地存储恢复div标记时只输出未定义的内容,所以我采用了另一种方法,保存innerhtml而不是整个标记 下面是我保存内部html的代码

function saveqform() {
        var parent = document.getElementById("questions");
        console.log(parent);
        if (parent === undefined) {
            return;
        } else {
            localStorage.qtag = parent.innerHTML;
        }
    }
这是我恢复标签的代码

 function reloadqform() {
        console.log(localStorage.qid);
        console.log(localStorage.qtag);
        if (localStorage.qid === undefined || localStorage.qtag === undefined) {
            return;
        } else {
            $(document).ready(function() {
                var saved = localStorage.qtag;
                var parent = document.getElementById("element");
                parent.innerHTML=saved;
            });
        }
    }
实际上,这段代码完美地恢复了div标记和标记内的元素,只是我丢失了在javascript中使用.onclick方法设置的所有onclick函数
因此,我可以做些什么来简单地恢复标记,包括它的所有操作,这要提前感谢您不能在本地存储中存储DOM引用。本地存储仅存储字符串,而不存储DOM引用

可以存储DIV的内容,但不能存储DIV对象本身。如果要在还原对象上具有事件处理程序,则必须在创建还原对象后重新附加事件处理程序

在第二个示例中,如果要重写父级的所有innerHTML,则它将销毁并重新创建所有子元素,这将销毁所有可能已设置的事件处理程序。最好只保存/恢复一个特定元素的单个状态,从而在一个没有子元素的元素上设置
.innerHTML
。这样做,您就不会破坏任何事件处理程序

Cookie或本地存储可以将状态作为字符串存储在一页到下一页之间


这里需要记住的一点是,DOM对象只在当前页面中当前文档的生存期内存在。一旦加载了一个新页面,第一个页面中的所有内容都将被销毁,并创建了一个全新的文档、一组全新的DOM对象和一个全新的javascript环境。

这很奇怪,因为他说在div还原中它工作得很好。但只有事件消失了。那么它是在保存dom元素吗?@Dvir-是的,这是因为在他的第二个示例中,他存储了
.innerHTML
,这是一个字符串,然后他将该innerHTML分配给新页面。这应该行得通。必须在新文档中手动重新附加事件处理程序。您不能将事件处理程序保存在本地存储中。好的,还有什么选择呢?我的意思是,现在我没有办法,只能重新分配事件处理程序,有没有一种方法可以一步完成这项工作,我的意思是存储整个dom,还是继续我的任务approach@A'amerMohamed-您可能只需要存储节点的内容,而不是整个HTML块,但是我们需要在感兴趣的区域中查看HTML以及实际需要存储的内容(可能没有理由实际存储HTML,只存储某些对象的内容)。当您通过在
.innerHTML
中指定嵌入对象来“重建”HTML时,事件处理程序将丢失。如果只设置一个节点的
.innerHTML
,而该
.innerHTML
中没有子节点,则不会丢失上的事件处理程序。不,您不能存储整个DOM、事件处理程序和所有内容。为了满足您的好奇心,我正在做的是动态生成问题,如google forms style,但我需要在刷新页面时,用户不会丢失所有更改,这就是为什么我需要保存整个HTML块以简化操作,但我想现在,数据被保存,结构被重建,无论如何,谢谢