真假删除

处理多个提交选项时,为了让用户可以自行删除选项, 用javascript处理了一下

        function delfile(f_no){
		     if(confirm('确认删除所选择订单?')){ 
		       
                document.getElementById('f_'+f_no).removeChild;
                document.getElementById('f_'+f_no).style.display ='none';
               } 
        } 


事实上这样并没有真正的删除表单项,提交以后还是删除以前的数量

removeChild只是从Dom树中移除。这个变量还是存在的,要过一段时间才会被浏览器回收。

二直接用 tb.deleteRow(i); 这里是真的删除了 //tb是个table


Ext的做法

removeNode : isIE ? function(){   
    var d;   
    return function(n){   
        if(n && n.tagName != 'BODY'){   
            d = d || document.createElement('div');   
            d.appendChild(n);   
            d.innerHTML = '';   
        }   
    }   
}() : function(n){   
    if(n && n.parentNode && n.tagName != 'BODY'){   
        n.parentNode.removeChild(n);   
    }   
},  

ie的问题就是,不会回收被remove的node,虽然这个node已经没有任何js对象在直接或间接的引用到它。对应的解决方案就是把node扔到一个div里(嘿嘿,这个div就是ie的垃圾回收箱),然后把其innerHTML清空。

当然,按照MS的人的说法,这个不是一个真正的memory leak,因为你刷新页面时是会释放这些对象的。但是ajax程序如果是长时间驻留在一个页面,并且动态增删许多节点,那累积起来的结果确实够惨。




你可能感兴趣的:(JavaScript,Ajax,IE,ext,F#)