清空元素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 相关文章推荐
禁止JQuery中的load方法装载IE缓存中文件的方法
Sep 11 Javascript
jQuery 处理网页内容的实现代码
Feb 15 Javascript
IE6、IE7中获取Button元素的值的bug说明
Aug 28 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
Apr 14 Javascript
script的async属性以非阻塞的模式加载脚本
Jan 15 Javascript
浅谈Sizzle的“编译原理”
Apr 14 Javascript
jQuery与JS加载事件用法分析
Sep 04 Javascript
js中null与空字符串""的区别讲解
Jan 17 Javascript
浅析JavaScript异步代码优化
Mar 18 Javascript
解决vue+ element ui 表单验证有值但验证失败问题
Jan 16 Javascript
vue实现打地鼠小游戏
Aug 21 Javascript
js实现磁性吸附的示例
Oct 26 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使用imagick模块实现图片缩放、裁剪、压缩示例
2014/04/17 PHP
PHP+memcache实现消息队列案例分享
2014/05/21 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
php上传图片获取路径及给表单字段赋值的方法
2016/01/23 PHP
PHP7新特性foreach 修改示例介绍
2016/08/26 PHP
PHPMAILER实现PHP发邮件功能
2018/04/18 PHP
Laravel 关联模型-关联新增和关联更新的方法
2019/10/10 PHP
JavaScript 常用函数
2009/12/30 Javascript
Web跨浏览器进程通信(Web跨域)
2013/04/17 Javascript
让JavaScript的Alert弹出框失效的方法禁止弹出警告框
2014/09/03 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
原生js实现模拟滚动条
2015/06/15 Javascript
JQuery+Ajax实现数据查询、排序和分页功能
2015/09/27 Javascript
基于JavaScript实现树形下拉框
2016/08/10 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
解决vue-cli单页面手机应用input点击手机端虚拟键盘弹出盖住input问题
2018/08/25 Javascript
vue 插槽简介及使用示例
2020/11/19 Vue.js
浅谈Python NLP入门教程
2017/12/25 Python
pyqt5 删除layout中的所有widget方法
2019/06/25 Python
python实现对图片进行旋转,放缩,裁剪的功能
2019/08/07 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
django之导入并执行自定义的函数模块图解
2020/04/01 Python
Proenza Schouler官方网站:纽约女装和配饰品牌
2019/01/03 全球购物
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
加拿大的标志性百货公司:Hudson’s Bay(哈得逊湾)
2019/09/03 全球购物
Tomcat Mysql datasource数据源配置
2015/12/28 面试题
简单的JAVA编程面试题
2013/03/19 面试题
博士生入学考试推荐信
2013/11/17 职场文书
防灾减灾日活动总结
2014/08/26 职场文书
假如给我三天光明:舟逆水而行,人遇挫而达 
2019/10/29 职场文书
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python
Navicat Premium自定义 sql 标签的创建方式
2022/09/23 数据库