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

Cat*_*lin 9 javascript performance jquery

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

每次我打开弹出窗口,在我刚才打电话的代码中$("#popup").html(response).这将使用新内容覆盖现有的html内容.

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

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

and*_*lrc 8

简短的回答没有.

jQuery.fn.htmlDOMNode.innerHTML =在做了其他几件事之后使用.一种是删除节点上存储的任何数据(通过存储$.fn.data),请参阅http://james.padolsey.com/jquery/#v=git&fn=jQuery.fn.html以获取完整的源概述.

.innerHTML删除子项并替换为新的html.但要注意内存泄漏.我会jQuery.fn.empty在设置innerHTML之前使用.例如.

var a = document.createElement('div'),
    b = document.createElement('div');

    b.appendChild(a);

    b.innerHTML = 'new innerHMTL'.
Run Code Online (Sandbox Code Playgroud)

你会认为一切都好.但是,替换/删除的节点仍然在变量中捕获a,因此不会被抛出到垃圾收集器.我不确定jQuery是否存储DOMNodes内部,直到你调用jQuery.removeData等.


Ole*_*Aza 5

html方法的jQuery文档说:

使用.html()设置元素的内容时,该元素中的所有内容都将被新内容完全替换。此外,在用新内容替换那些元素之前,jQuery从子元素中删除了其他构造,例如数据和事件处理程序。

因此,您无需致电empty()