清空元素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 相关文章推荐
Extjs学习笔记之六 面版
Jan 08 Javascript
Cookie 小记
Apr 01 Javascript
jsvascript图像处理—(计算机视觉应用)图像金字塔
Jan 15 Javascript
jQuery实现仿Google首页拖动效果的方法
May 04 Javascript
jQuery左侧大图右侧小图焦点图幻灯切换代码分享
Aug 19 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 Javascript
javascript从定义到执行 你不知道的那些事
Jan 04 Javascript
RequireJS多页面应用实例分析
Jun 29 Javascript
JavaScript 最佳实践:帮你提升代码质量
Dec 03 Javascript
详谈js模块化规范
Jul 07 Javascript
vue实现父子组件之间的通信以及兄弟组件的通信功能示例
Jan 29 Javascript
JavaScript如何实现元素全排列实例代码
May 14 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写的简易聊天室代码
2011/06/04 PHP
PHP使用正则表达式清除超链接文本
2013/11/12 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
如何用PHP来实现一个动态Web服务器
2015/07/29 PHP
PHP单例模式与工厂模式详解
2017/08/29 PHP
PHP压缩图片功能的介绍
2019/03/21 PHP
基于PHP实现邮箱验证激活过程详解
2020/10/28 PHP
出现“不能执行已释放的Script代码”错误的原因及解决办法
2007/08/29 Javascript
Knockout text绑定DOM的使用方法
2013/11/15 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
使用JavaScript和C#中获得referer
2014/11/14 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
2015/04/14 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
详解Angular.js指令中scope类型的几种特殊情况
2017/02/21 Javascript
webpack多入口文件页面打包配置详解
2018/01/09 Javascript
js异步上传多张图片插件的使用方法
2018/10/22 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
Python获取DLL和EXE文件版本号的方法
2015/03/10 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
2017/11/17 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
Python3 max()函数基础用法
2019/02/19 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
Python3常用内置方法代码实例
2019/11/18 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Keras之fit_generator与train_on_batch用法
2020/06/17 Python
在 Python 中使用 7zip 备份文件的操作
2020/12/11 Python
初一英语教学反思
2014/01/11 职场文书
运动会广播稿200米
2014/01/27 职场文书
保密工作责任书
2014/04/16 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
会计毕业生自荐书
2014/06/12 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
Python&Matlab实现樱花的绘制
2022/04/07 Python