清空元素html("")、innerHTML="" 与 empty()的差别

一、清空元素的差别
     1、错误做法一:
           $("#test").html("");//该做法会导致内存泄露
     2、错误做法二:
           $("#test")[0].innerHTML="";  ;//该做法会导致内存泄露
     3、正确做法:
	       //$("#test").empty();        

二、原理:

在 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. }

[JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的差别:关于内容泄露问题的更多相关文章

  1. [JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别 、remove()区别

    清空元素html("").innerHTML="" 与 empty()的区别 一.清空元素的区别     1.错误做法一:           $(" ...

  2. js jquery 获取元素(父节点,子节点,兄弟节点),元素筛选

    转载:https://www.cnblogs.com/ooo0/p/6278102.html js jquery 获取元素(父节点,子节点,兄弟节点) 一,js 获取元素(父节点,子节点,兄弟节点) ...

  3. js jquery 判断元素是否在数组内

    js jquery 判断元素是否在数组内 一,js方法 var arr = ["a", "b", "c"]; // js arr.index ...

  4. js/jquery获取元素,元素筛选器

    1.js获取元素 var test = document.getElementById("test"); var parent = test.parentNode; // 父节点 ...

  5. js+jquery创建元素

    例:创建如下标签: <a id="baidu" class="link" name="baidu">这是一个链接</a&g ...

  6. jQuery清空元素和克隆元素

    1.清空 $(function () { $('#btn').click(function () { $('#ul1').html('') $('#ul1').empty() $('#ul1').re ...

  7. 记一次使用jQuery清空元素

    缘由: 数据量比较大,分页显示,页码是自己写的,动态创建页码,创建元素时会绑定元素的click事件,每次显示五个页码(1,2,3,4,5),点击2—4不换,点5,页码变成3,4,5,6,7. 遇到的问 ...

  8. js jquery 判断元素是否在数组内(转)

    一,js方法 var arr = ["a", "b", "c"]; // js arr.indexOf("c") var ...

  9. js JQuery 获取元素和遍历

    用户名<input class="yonghu" type="text" id="user" name="u" / ...

随机推荐

  1. 利用jQuery无缝滚动插件liMarquee实现图片(链接)和文字(链接)向右无缝滚动(兼容ie7+)

    像新闻类的版块经常要求一条条的新闻滚动出现,要实现这种效果,可以使用jQuery无缝滚动插件liMarquee. 注意: 1. 它的兼容性是IE7+,及现代浏览器. 2. 引用的jquery的版本最好 ...

  2. Codeforces 1063D Candies for Children

    题目大意 给定整数 $n, k, l, r$,$1\le n, k \le 10^{11}$,$1\le l, r \le n$ . 令 $ m = r - l + 1$,若 $m \le 0$,$m ...

  3. BZOJ5306 [HAOI2018]染色 【组合数 + 容斥 + NTT】

    题目 为了报答小 C 的苹果, 小 G 打算送给热爱美术的小 C 一块画布, 这块画布可 以抽象为一个长度为 \(N\) 的序列, 每个位置都可以被染成 \(M\) 种颜色中的某一种. 然而小 C 只 ...

  4. js处理浮点数计算误差

    众所周知,浮点计算会产生舍入误差的问题,比如,0.1+0.2,结果应该是0.3,但是计算的结果并不是如此,而是0.30000000000000004,这是使用基于IEEE754数值的浮点计算的通病,j ...

  5. pat 团体天梯赛 L3-007. 天梯地图

    L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...

  6. 怎样让enum枚举支持string

    原文发布时间为:2011-03-02 -- 来源于本人的百度文章 [由搬家工具导入] 大家都知道enum是以下两种情况,不能支持string 1,enum类型是静态 2,enum类型仅限于long、i ...

  7. [LeetCode] Factorial Trailing Zeroes 阶乘末尾0

    Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in log ...

  8. 牛客网 牛客小白月赛2 B.小马过河-简单的计算几何

    B.小马过河 链接:https://www.nowcoder.com/acm/contest/86/B 这个题是一个简单的几何题???套个板子就过了,就是直线上两点确定的这条直线和直线外一点的垂足的坐 ...

  9. 透过ReentrantLock窥探AQS

    背景 JDK1.5引入的并发包提供了一系列支持中等并发的类,这些组件是一系列的同步器,几乎任一同步器都可以实现其他形式的同步器,例如,可以用可重入锁实现信号量或者用信号量实现可重入锁.但是,这样做带来 ...

  10. POJ 1067 取石子游戏 [博弈]

    题意:威佐夫博弈. 思路:看了很多证明都没看懂.最后决定就记住结论好了. 对于所有的奇异局面(必败局),有通项公式 Pi = (a, b), (a = i * [(sqrt(5) + 1) / 2], ...