清空元素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的各种节点操作实例演示代码
Jun 27 Javascript
jQuery实现鼠标经过图片预览大图效果
Apr 10 Javascript
JavaScript实现自动消除按钮功能的方法
Aug 05 Javascript
Bootstrap Chart组件使用教程
Apr 28 Javascript
AngularJs IE Compatibility 兼容老版本IE
Sep 01 Javascript
jquery ajaxfileupload异步上传插件
Nov 21 jQuery
关于React动态加载路由处理的相关问题
Jan 07 Javascript
vue按需加载实例详解
Sep 06 Javascript
微信小程序商品详情页底部弹出框
Nov 22 Javascript
微信小程序表单验证WxValidate的使用
Nov 27 Javascript
vue 开发之路由配置方法详解
Dec 02 Javascript
JS浏览器BOM常见操作实例详解
Apr 27 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
php MYSQL 数据备份类
2009/06/19 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
php在线解压ZIP文件的方法
2014/12/30 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
2016/03/21 PHP
PHPStudy下如何为Apache安装SSL证书的方法步骤
2019/01/23 PHP
PHP实现数组和对象的相互转换操作示例
2019/03/20 PHP
基于PHP实现短信验证码发送次数限制
2020/07/11 PHP
创建一个复制UBB软件信息的链接或按钮的js代码
2008/01/06 Javascript
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
JQuery 选项卡效果(JS与HTML的分离)
2010/04/01 Javascript
页面图片浮动左右滑动效果的简单实现案例
2014/02/10 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
2016/05/16 Javascript
jQuery给指定的table动态添加删除行的操作方法
2016/10/12 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
jquery dataTable 后台加载数据并分页实例代码
2017/06/07 jQuery
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
详解webpack 最简打包结果分析
2019/02/20 Javascript
通过JS运行机制的角度说说作用域
2019/03/12 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
[05:49]2014DOTA2TI4正赛第二日综述 昔日冠军纷纷落马 VG LGD占尽先机
2014/07/20 DOTA
python实现封装得到virustotal扫描结果
2014/10/05 Python
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
python集合常见运算案例解析
2019/10/17 Python
在python3中使用shuffle函数要注意的地方
2020/02/28 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
2020/07/02 Python
jupyter使用自动补全和切换默认浏览器的方法
2020/11/18 Python
新奥尔良珠宝:Mignon Faget
2020/11/23 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
国贸专业的职业规划范文
2014/01/23 职场文书
《那片绿绿的爬山虎》教学反思
2014/02/27 职场文书
浪费资源的建议书
2014/03/12 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
群众路线自我剖析材料
2014/10/08 职场文书
干部作风建设心得体会
2014/10/22 职场文书