【发布时间】:2025-09-30 18:40:02
【问题描述】:
我想存储一个代表 DOM 元素的 jQuery 对象,以供以后使用。我已经有了这些方法来执行对象和文本的存储和检索,与 localStorage 往来:
var Data = {
set: function(key, value, session) {
if (!key) {return;}
if (typeof value === "object") {
value = JSON.stringify(value);
}
if(session){
sessionStorage.setItem(key, value);
}else{
localStorage.setItem(key, value);
}
},
get: function(key, session) {
if(session){
var value = sessionStorage.getItem(key);
}else{
var value = localStorage.getItem(key);
}
if (!value) {return;}
// assume it is an object that has been stringified
if (value[0] === "{" || value[0] === "[") {
value = JSON.parse(value);
}
return value;
}
}
谢天谢地,它基于 Stack Overflow 源代码,适用于字符串以外的简单对象。
我正在考虑这样做:
$clone = $('#myform').clone(true);
Data.set('clonedata', $clone);
然后,很久以后,在别处:
$retrieved = Data.get('clonedata');
问题是,在这种情况下它似乎不起作用。 jQuery对象不能以这种方式序列化和反序列化有根本原因吗?
这有什么用?一种情况是在用户填写长表单时在 localStorage 中持久化(自动保存)表单数据。然后可以在网络中断或无意的浏览器导航或关闭之后提供信息。
【问题讨论】:
-
你应该把它转换成原始 html 然后存储它。
-
嗯。但是,我会丢失所有以前绑定的事件,对吗?
-
你不能真正做到这一点。您最好说明为什么需要这种行为
-
@A.Wolff:实现表单自动保存还不够好?有没有更好的方法?
-
然后存储序列化的表单并在加载时渲染它。我会发布答案
标签: javascript jquery serialization deserialization clone