我有一个弹出式插件,它使用AJAX调用的响应设置<div/>
的html内容。
每次打开弹出窗口时,我都会在代码中调用$("#popup").html(response)
。这将使用新内容覆盖现有的html内容。
我应该在调用$("popup").empty()
之前调用$("popup").html(response)
,以便释放以前在$("popup")
div中的对象使用的浏览器内存? (最终防止内存泄漏)
PS:如果我致电$("popup")[0].innerHTML = response
怎么办?我应该拨打.empty()
方法吗?
答案 0 :(得分:8)
简短回答否。
在执行其他一些操作后, jQuery.fn.html
会使用DOMNode.innerHTML =
。一种是删除节点上存储的任何数据(通过$.fn.data
存储),有关完整的源概述,请参阅http://james.padolsey.com/jquery/#v=git&fn=jQuery.fn.html。
.innerHTML
删除子项并替换为新的html。但要注意内存泄漏。在设置innerHTML之前我会使用jQuery.fn.empty
。例如
var a = document.createElement('div'),
b = document.createElement('div');
b.appendChild(a);
b.innerHTML = 'new innerHMTL'.
你会认为一切都好。但是,替换/删除的节点仍然在变量a
中捕获,因此不会被抛出到垃圾收集器。我不确定jQuery是否存储内部DOMNodes,直到你调用jQuery.removeData
等。
答案 1 :(得分:5)
html方法的JQuery文档说:
当.html()用于设置元素的内容时,该元素中的任何内容都将被新内容完全替换。此外,在使用新内容替换这些元素之前,jQuery会从子元素中删除其他构造(如数据和事件处理程序)。
因此您无需致电empty()
。
答案 2 :(得分:1)
无需致电empty()
。html
(response
)方法ovverides
existing content。
答案 3 :(得分:0)
除了.empty()之外没有区别,并且.html()可以覆盖上下文的内容