UID的MooTools中的新元素

时间:2011-04-06 13:30:26

标签: javascript mootools

是否可以根据mootools创建的自动UID在Mootools上实例化一个元素?

编辑:提供更多信息。我正在使用https://github.com/browserstate/history.js在ajax页面中创建历史记录。当我向它添加一个DOM元素(它没有id)时,它会在某个时刻传递一个JSON.toString方法,而我现在拥有的元素就是uid。

我需要根据这个UID重新创建元素,我怎么能这样做呢?我是否需要先将其添加到全局存储中以便以后检索?如果是这样,怎么样?

1 个答案:

答案 0 :(得分:1)

鉴于编辑问题:

抱歉,我不明白你在做什么。

你有一个元素。在某些时候,元素被转换为一个被序列化的对象(所有这些?原型等?)。然后,您再次获取该数据并转换为对象,但是想要保留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)。

然而,你可以通过使用事件委托来解决这个问题。

另外,您可能希望存储父节点等,以便将其放回原位。