清空元素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文件的函数代码分享
Jul 28 Javascript
获取body标签的两种方法
Oct 13 Javascript
Javascript和Java获取各种form表单信息的简单实例
Feb 14 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
May 28 Javascript
推荐一个封装好的getElementsByClassName方法
Dec 02 Javascript
vue.js实现用户评论、登录、注册、及修改信息功能
May 30 Javascript
使用vue制作探探滑动堆叠组件的实例代码
Mar 07 Javascript
vue axios请求拦截实例代码
Mar 29 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
Sep 03 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
Dec 19 Javascript
vue+element实现表单校验功能
May 20 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
Jul 22 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
mac下安装nginx和php
2013/11/04 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
mac环境中使用brew安装php5.5.15
2014/08/18 PHP
浅谈使用 Yii2 AssetBundle 中 $publishOptions 的正确姿势
2017/11/08 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
使用Firebug对js进行断点调试的图文方法
2011/04/02 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
JavaScript在for循环中绑定事件解决事件参数不同的情况
2014/01/20 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
echart简介_动力节点Java学院整理
2017/08/11 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
2017/09/26 Javascript
linux 后台运行node服务指令方法
2018/05/23 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
在Python下进行UDP网络编程的教程
2015/04/29 Python
Python开发虚拟环境使用virtualenvwrapper的搭建步骤教程图解
2018/09/19 Python
python高级特性和高阶函数及使用详解
2018/10/17 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
Pyecharts 动态地图 geo()和map()的安装与用法详解
2020/03/25 Python
凯特·丝蓓英国官网:Kate Spade英国
2016/11/07 全球购物
奥地利网上书店:Weltbild
2017/07/14 全球购物
英国在线房屋中介网站:Yopa
2018/01/09 全球购物
德国50岁以上交友网站:Lebensfreunde
2020/03/18 全球购物
广告学专业毕业生自荐信
2014/05/28 职场文书
2014年国庆节演讲稿
2014/09/19 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
比赛主持人开场白
2015/05/29 职场文书
地道战观后感
2015/06/04 职场文书
庆七一晚会主持词
2015/06/30 职场文书
培训简讯范文
2015/07/20 职场文书
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS
详解apache编译安装httpd-2.4.54及三种风格的init程序特点和区别
2022/07/15 Servers