jQuery 的empty()方法在可以頁面移除元素,但是並不能釋放這些元素的子元素佔用的內存,而這些元素的子元素將變成“遊離狀態”,理解了樹的概念就很好理解這個。
現在需要做的:
第一步:
就是將這些子元素放進<div>標籤中,再將<div>的HTML賦值為空:
jQuery.fn.removeNode = function(){
var d;
return function(){
if(this[0] && this[0].tagName != 'BODY'){
d = d || document.createElement('div');
d.appendChild(this[0]);
d.innerHTML = '';
d.outerHTML = '';
}
}
}();
第二步:
將這些元素綁定的事件釋放
(function($) {
$.fn.Disposable = function(cln) {
return this.each(function() {
var el = this;
if (!el.dispose) {
el.dispose = cleanup; // will be called by
// Microsoft for cleanup
$(window).bind("unload", cleanup);
}
function cleanup() {
if (!el)
return;
$(el).unbind();
$(window).unbind("unload", cleanup);
el.dispose = null;
el = null;
};
});
};
})(jQuery);
測試結果有效,可以通過 IE Sieve 工具進行查看。
以上jQuery代碼來自網絡,參考地址:
http://zhanjianhua.iteye.com/blog/230695#comments
http://www.codeproject.com/Articles/34348/jQuery-Memory-Leak-in-UpdatePanel