清空元素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 TextArea动态显示剩余字符
Oct 22 Javascript
最新28个很棒的jQuery 教程
May 28 Javascript
JS限制Textarea文本域字符个数的具体实现
Aug 02 Javascript
js转化毫秒为时间格式代码
Apr 10 Javascript
JavaScript 模块化编程(笔记)
Apr 08 Javascript
JavaScript深度复制(deep clone)的实现方法
Feb 19 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
Apr 18 Javascript
详解vue项目构建与实战
Jun 27 Javascript
JS实现的简单分页功能示例
Aug 23 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
Sep 12 Javascript
angularJS1 url中携带参数的获取方法
Oct 09 Javascript
layui 中select下拉change事件失效的解决方法
Sep 20 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中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
php将字符串全部转换成大写或者小写的方法
2015/03/17 PHP
浅谈PHP Cookie处理函数
2016/06/10 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
表格 隔行换色升级版
2009/11/07 Javascript
bgsound 背景音乐 的一些常用方法及特殊用法小结
2010/05/11 Javascript
JS实现程序暂停与继续功能代码解读
2013/10/10 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
jqgrid 编辑添加功能详细解析
2013/11/08 Javascript
jquery如何实现锚点链接之间的平滑滚动
2013/12/02 Javascript
javascript中的this详解
2014/12/08 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
BootStrap日期控件在模态框中选择时间下拉菜单无效的原因及解决办法(火狐下不能点击)
2016/08/18 Javascript
详解AngularJS中$filter过滤器使用(自定义过滤器)
2017/02/04 Javascript
浅谈js中同名函数和同名变量的执行问题
2017/02/12 Javascript
jquery实现全选、全不选以及单选功能
2017/03/23 jQuery
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
VueAwesomeSwiper在VUE中的使用以及遇到的一些问题
2018/01/11 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
vue解决一个方法同时发送多个请求的问题
2018/09/25 Javascript
webpack开发环境和生产环境的深入理解
2018/11/08 Javascript
图解javascript作用域链
2019/05/27 Javascript
jQuery实现input[type=file]多图预览上传删除等功能
2019/08/02 jQuery
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
[06:25]第二届DOTA2亚洲邀请赛主赛事第二天比赛集锦.mp4
2017/04/03 DOTA
django如何自己创建一个中间件
2019/07/24 Python
python使用配置文件过程详解
2019/12/28 Python
Django如何使用redis作为缓存
2020/05/21 Python
基于Jquery和Css3代码制作可以缩放的搜索框
2015/11/19 HTML / CSS
学生党员思想汇报
2013/12/28 职场文书
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
合伙经营协议书范本
2014/04/18 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
公司酒会致辞
2015/07/30 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书