必须在html()或innerHTML之前调用empty()

Is necessary to call empty() before html() or before innerHTML?

本文关键字:调用 empty innerHTML html      更新时间:2023-09-26

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

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

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

如果我呼叫$("popup")[0].innerHTML = response呢?我应该调用.empty()方法吗?

简短回答否

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

JQuery文档中的html方法说:

当使用.html()来设置元素的内容时,该元素中的任何内容都将被新内容完全替换。此外,在用新内容替换子元素之前,jQuery会从子元素中删除其他结构,如数据和事件处理程序。

所以你不需要调用empty()

无需调用empty()html (response)方法ovverides现有内容

除了。empty()运行速度更快和。html()可以覆盖上下文内容之外,没有什么区别

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