清空元素html("") innerHTML="" 与 empty()的区别和应用(推荐)


Posted in Javascript onAugust 14, 2017

一、清空元素的区别

     1、错误做法一:

           $("#test").html("");//该做法会导致内存泄露

     2、错误做法二:

           $("#test")[0].innerHTML="";  ;//该做法会导致内存泄露

     3、正确做法:

        //$("#test").empty();       

二、原理:

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

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

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

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

remove: function( selector ) { 
 if ( !selector || jQuery.filter( selector, [ this ] ).length ) { 
  // Prevent memory leaks 
  jQuery( "*", this ).add([this]).each(function(){ 
  jQuery.event.remove(this); 
  jQuery.removeData(this); 
  }); 
  if (this.parentNode) 
  this.parentNode.removeChild( this ); 
 } 
 }, 
 empty: function() { 
 // Remove element nodes and prevent memory leaks 
 jQuery(this).children().remove(); 
 
 // Remove any remaining nodes 
 while ( this.firstChild ) 
  this.removeChild( this.firstChild ); 
 }

  以上就是小编为大家整理的清空元素html("")、innerHTML="" 与 empty()的区别和应用的全部内容啦~希望能够帮助到各位朋友~~

Javascript 相关文章推荐
使用javascript访问XML数据的实例
Dec 27 Javascript
javascript 有趣而诡异的数组
Apr 06 Javascript
jqGrid日期格式的判断示例代码(开始日期与结束日期)
Nov 08 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
Apr 07 Javascript
使用Raygun来自动追踪AngularJS中的异常
Jun 23 Javascript
jquery实现右侧栏菜单选择操作
Mar 04 Javascript
JavaScript 详解预编译原理
Jan 22 Javascript
浅谈Vue下使用百度地图的简易方法
Mar 23 Javascript
详解如何在你的Vue项目配置vux
Jun 04 Javascript
vue 使用html2canvas将DOM转化为图片的方法
Sep 11 Javascript
jquery实现二级导航下拉菜单效果实例
May 14 jQuery
vue使用nprogress实现进度条
Dec 09 Javascript
JavaScript监听手机物理返回键的两种解决方法
Aug 14 #Javascript
jQuery绑定事件方法及区别(bind,click,on,live,one)
Aug 14 #jQuery
js单页hash路由原理与应用实战详解
Aug 14 #Javascript
jQuery选择器特殊字符与属性空格问题
Aug 14 #jQuery
详解升级react-router 4 踩坑指南
Aug 14 #Javascript
javaScript封装的各种写法
Aug 14 #Javascript
vue教程之toast弹框全局调用示例详解
Aug 24 #Javascript
You might like
咖啡与牛奶
2021/03/03 冲泡冲煮
PHP进程同步代码实例
2015/02/12 PHP
twig模板获取全局变量的方法
2016/02/05 PHP
详解WordPress中添加友情链接的方法
2016/05/21 PHP
PHP API接口必备之输出json格式数据示例代码
2017/06/27 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
javascript或asp实现的判断身份证号码是否正确两种验证方法
2009/11/26 Javascript
jQuery实现的立体文字渐变效果
2010/05/17 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
jquery实现实时改变网页字体大小、字体背景色和颜色的方法
2015/08/05 Javascript
jQuery+CSS3+Html5实现弹出层效果实例代码(附源码下载)
2016/05/16 Javascript
全面理解JavaScript中的继承(必看)
2016/06/16 Javascript
Vue.js每天必学之组件与组件间的通信
2016/09/08 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
jQuery extend()详解及简单实例
2017/05/06 jQuery
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
[48:26]VGJ.S vs infamous Supermajor 败者组 BO3 第二场 6.4
2018/06/05 DOTA
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
两个使用Python脚本操作文件的小示例分享
2015/08/27 Python
Python使用functools实现注解同步方法
2018/02/06 Python
python 搜索大文件的实例代码
2019/07/08 Python
python 利用浏览器 Cookie 模拟登录的用户访问知乎的方法
2019/07/11 Python
Django框架视图介绍与使用详解
2019/07/18 Python
Python列表推导式实现代码实例
2020/09/09 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
电子信息工程专业推荐信
2014/02/14 职场文书
党的群众路线对照检查材料
2014/09/22 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
高三毕业感言
2015/07/30 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP