是否需要在html()之前或innerHTML之前调用empty()?

时间:2013-06-03 12:21:46

标签: javascript jquery performance

我有一个弹出式插件,它使用AJAX调用的响应设置<div/>的html内容。

每次打开弹出窗口时,我都会在代码中调用$("#popup").html(response)。这将使用新内容覆盖现有的html内容。

我应该在调用$("popup").empty()之前调用$("popup").html(response),以便释放以前在$("popup") div中的对象使用的浏览器内存? (最终防止内存泄漏)

PS:如果我致电$("popup")[0].innerHTML = response怎么办?我应该拨打.empty()方法吗?

4 个答案:

答案 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()htmlresponse)方法ovverides existing content

答案 3 :(得分:0)

除了.empty()之外没有区别,并且.html()可以覆盖上下文的内容

http://jsperf.com/jquery-empty-vs-html/17

相关问题