二、原理:

在 jquery 中用 innerHTML 的方法来清空元素,是必然会导致内存泄露的,由于 jquery 对于同一元素多事件处理没有直接采用浏览器事件模型,而是自己缓存事件,遍历触发,以及便于 trigger 程序触发 :

  1. // Init the element's event structure
  2. var events = jQuery.data(elem, "events" ) || jQuery.data(elem, "events" , {}),
  3. handle = jQuery.data(elem, "handle" ) || jQuery.data(elem, "handle" , function (){
  4. // Handle the second event of a trigger and when
  5. // an event is called after a page has unloaded
  6. return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
  7. jQuery.event.handle.apply(arguments.callee.elem, arguments) :
  8. undefined;
  9. });

采用 data 方法,将一些数据关联到了元素上面,上述事件即是采用该机制缓存事件监听器。

那么就可以知道,直接 innerHTML=“” 而不通知 jquery 清空与将要删除元素关联的数据,那么这部分数据就再也释放不了了,即为内存泄露。

  1. remove: function ( selector ) {
  2. if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
  3. // Prevent memory leaks
  4. jQuery( "*" , this ).add([ this ]).each( function (){
  5. jQuery.event.remove( this );
  6. jQuery.removeData( this );
  7. });
  8. if ( this .parentNode)
  9. this .parentNode.removeChild( this );
  10. }
  11. },
  12. empty: function () {
  13. // Remove element nodes and prevent memory leaks
  14. jQuery( this ).children().remove();
  15. // Remove any remaining nodes
  16. while ( this .firstChild )
  17. this .removeChild( this .firstChild );
  18. }
清空元素html("")、innerHTML="" 与 empty()的区别一、清空元素的区别     1、错误做法一:           $("#test").html("");//该做法会导致内存泄露 2、错误做法二:           $("#test")[0].innerHTML="";  ;//该做法会导致内存泄露 3、正确做法: 由于页面展示东西太多,而且可能相似的 内容 太多,肉眼一眼分 有点小难度,所以为了更好的展示需要看到的 内容 ,我们要 理标签中的 内容 <code id="show"></code> <a href="javascript:clearWindow();"> 内容 </a> function clearWindow(){ $("#show... (1).document.write("标签代码");缺陷:页面加载后创建 元素 ,把页面中原有的 内容 全部的干掉 (2). innerHTML (3).document.createElement("标签的名字") 2、 jQuery 中创建 元素 的方式: (1).$("标签的代码") 创建 元素 的方式.$(“ html 标签”)可以创建 元素 (2).对象.htm... 要用到移除指定 元素 的时候,发现empty()与remove([expr])都能够用来实现。可细致观察效果的话就能够发现。 empty()是仅仅移除了 指定 元素 中的全部子节点。拿$("p").empty()来说。他仅仅是把&lt;p&gt;dsfsd&lt;/p&gt;中的文本给移除了。而留下 了&lt;p&gt;&lt;/p&gt;,仍保留其在dom中所占的位置。 remove([ex...
删除 HTML 元素 也是通过删除节点来完成的。对于普通的 HTML 元素 ,可用通用方法来删除节点,而列表框、下拉菜单、表格则有额外的方法来删除 HTML 元素 。 删除节点通常借助于其父节点,Node 对象提供了如下方法来删除子节点。 ➢removeChild(oldNode): 删除oldNode子节点。 在从父节点中删除该子节点后,该子节点代表的 内容 也会消失。下 面的代码通过控制 HTML 增加、删...
r = session.get(the_url, headers=header) res = r. js on() city_list = js onpath. js onpath(res, "$..text")#"$..name"取所有k=name的v for name in city_list: name=nam...
总结以下三种 canvas画布的方式: 1. 最简单的方法:由于canvas每当高度或宽度被重设时,画布 内容 就会被 ,因此可以用以下方法 : function clearCanvas() var c=document.getElementById("myCanvas"); var cxt=c.getContext("2d"); c.height=c.heig
for (var i = 0; i < rows.length; i++) { var deleteCell = rows[i].insertCell(1); deleteCell. innerHTML = `<a href="javascript:;" value="删除${i+1}">删除</a>`; </script> </body> </ html > 希望这个回答能帮到您!