鑑於編輯的問題:
對不起,我不明白你在做什麼。
你有一個元素。在某些時候元素會變成一個被序列化的對象(所有的原型等等)。然後你將這些數據再次轉換爲一個對象,但是想保留這個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