当前位置:  开发笔记 > 编程语言 > 正文

一个对象如何在一个事件中自我破坏,在javascript中?

如何解决《一个对象如何在一个事件中自我破坏,在javascript中?》经验,为你挑选了2个好方法。

我有这个功能,可以即时创建DIV.但现在,我想在onclick事件中销毁这个对象,但我只是不知道如何.

function creatediv(id) {

    var newdiv = document.createElement('div');
    newdiv.setAttribute('id', id);
    newdiv.onclick=function(){this=null;};  //bad function
    document.body.appendChild(newdiv);

} 

我错过了什么?

谢谢



1> Chetan Sastr..:

将其设置为null不会破坏它.您需要从文档树中删除它,同时确保没有指向它的引用.

function creatediv(id) {
    var newdiv = document.createElement('div');
    newdiv.setAttribute('id', id);
    newdiv.onclick=function(e) {
        this.parentNode.removeChild(this);
    };  
    document.body.appendChild(newdiv);
    newdiv = null;//required in IE to prevent memory leak
}



2> KooiInc..:

接受的答案对我来说似乎不对.首先,它不考虑包含子节点的newdiv,因此建议的删除例程通过闭包(IE)保持内存泄漏的危险.其次,由于'newdiv = null'的位置,creatediv函数会立即销毁刚刚创建的元素.我建议使用Douglas Crockfords 清除函数作为click处理程序,用d替换d.

function purge(d) {
    var a = d.attributes, i, l, n;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            n = a[i].name;
            if (typeof d[n] === 'function') {
                d[n] = null;
            }
        }
    }
    a = d.childNodes;
    if (a) {
        l = a.length;
        for (i = 0; i < l; i += 1) {
            purge(d.childNodes[i]);
        }
    }
}

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有