清空元素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几种形式的树结构菜单
May 10 Javascript
jQuery 图片切换插件(代码比较少)
May 07 Javascript
jquery中animate动画积累的解决方法
Oct 05 Javascript
jQuery动画与特效详解
Feb 01 Javascript
js实现Select头像选择实时预览代码
Aug 17 Javascript
jQueryUI DatePicker 添加时分秒
Jun 04 Javascript
JS修改地址栏参数实例代码
Jun 14 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
javascript中href和replace的比较(详解)
Nov 25 Javascript
原生js实现移动端触摸轮播的示例代码
Dec 22 Javascript
vue实现简单学生信息管理
May 30 Javascript
VUE : vue-cli中去掉路由中的井号#操作
Sep 04 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
星际争霸 Starcraft 秘技补丁
2020/03/14 星际争霸
PHP parse_url 一个好用的函数
2009/10/03 PHP
PHP连接操作access数据库实例
2015/03/30 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
固定网页背景图同时保持图片比例的思路代码
2013/08/15 Javascript
使用JavaScript+canvas实现图片裁剪
2015/01/30 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
node.js express安装及示例网站搭建方法(分享)
2016/08/22 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
Bootstrap3 多选和单选框(checkbox)
2016/12/29 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
基于百度地图api清除指定覆盖物(Overlay)的方法
2018/01/26 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
vue数组对象排序的实现代码
2018/06/20 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
使用layer弹窗提交表单时判断表单是否输入为空的例子
2019/09/26 Javascript
uin-app+mockjs实现本地数据模拟
2020/08/26 Javascript
express异步函数异常捕获示例详解
2020/11/30 Javascript
python实现在控制台输入密码不显示的方法
2015/07/02 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
Sanic框架应用部署方法详解
2018/07/18 Python
详解Django的model查询操作与查询性能优化
2018/10/16 Python
Django中如何使用sass的方法步骤
2019/07/09 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
django框架auth模块用法实例详解
2019/12/10 Python
Python计算机视觉里的IOU计算实例
2020/01/17 Python
PyTorch在Windows环境搭建的方法步骤
2020/05/12 Python
viagogo意大利票务平台:演唱会、体育比赛、戏剧门票
2018/01/26 全球购物
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
党风廉政建设责任书
2014/04/14 职场文书
2016反腐倡廉警示教育心得体会
2016/01/13 职场文书
Python Matplotlib库实现画局部图
2021/11/17 Python
解决Python保存文件名太长OSError: [Errno 36] File name too long
2022/05/11 Python