鉴于编辑的问题:
对不起,我不明白你在做什么。
你有一个元素。在某些时候元素会变成一个被序列化的对象(所有的原型等等)。然后你将这些数据再次转换为一个对象,但是想保留这个uid?为什么?
我不明白的UID事项在这里多...
使用全球浏览器存储怎么也串行化串,这样不会有太大的帮助。我们在这里谈论页面加载的生存或只是附加/分离/覆盖元素?如果后者,这可以与一些调整。
(function() {
var Storage = {};
Element.implement({
saveElement: function() {
var uid = document.id(this).uid;
Storage[uid] = this;
return this;
}
});
this.restoreElement = function(uid) {
return Storage[uid] || null;
}
})();
var foo = document.id("foo"), uid = foo.uid;
console.log(uid);
foo.saveElement().addEvent("mouseenter", function() { alert("hi"); });
document.id("container").set("html", "");
setTimeout(function() {
var newElement = restoreElement(uid);
if (newElement)
newElement.inject(document.body);
console.log(newElement.uid);
}, 2000);
http://jsfiddle.net/dimitar/7mwmu/1/
这将允许你删除一个元素并在以后恢复它。
请记住,我做container.set("html", "");
这不是一个很好的做法。
如果你做的是.empty()
,它会GC成为foo,它会擦除它的存储空间,所以事件将无法存活。 foo.destroy()
也一样 - 你可以'视觉上'恢复元素,但没有任何关联的元素可以工作(事件或fx)。
但是,您可以通过使用事件代理来解决该问题。
此外,你可能想要存储父节点等,所以你可以把它放回到以前的地方。
首先感谢您的回答Dimitar。但我认为这并不能完全解决我需要的东西,这是我没有正确解释事情的错。我会编辑它以更好地解释发生了什么。 – 2011-04-06 13:51:36
当元素被序列化时,唯一剩下的就是UID和一个空构造。我需要从DOM中取回它。我最终存储在窗口商店并稍后检索。但是,感谢所有伟大的解释。 – 2011-04-07 00:18:20