我有这个功能,可以即时创建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); }
我错过了什么?
谢谢
将其设置为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 }
接受的答案对我来说似乎不对.首先,它不考虑包含子节点的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]); } } }