[JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别:关于内容泄露问题
来源:互联网 发布:数据库开发师工资 编辑:程序博客网 时间:2024/04/27 17:48
清空元素html("")、innerHTML="" 与 empty()的区别,以及remove()的用法
一、清空元素的区别 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 );
- }
要用到移除指定元素的时候,发现empty()与remove([expr])都可以用来实现。可仔细观察效果的话就可以发现。
empty()是只移除了 指定元素中的所有子节点,拿$("p").empty()来说,他只是把<p>dsfsd</p>中的文本给移除了,而留下 了<p></p>,仍保留其在dom中所占的位置。
remove([expr])则是把其从dom中删除,而不会保留其所占的位置。例:
<p>Hello</p>
World
<p>welcome</p>
执行$("p").empty()其结果是
<p></p>
World
<p></p>
执行$("p").remove()其结果是
World
0 0
- [JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别:关于内容泄露问题
- [JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别:关于内容泄露问题
- [JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别:关于内容泄露问题
- jquery删除、清空<div>之间的内容---empty()与remove()区别
- jquery清空元素内容
- jquery innerHTML 的清空注意事项
- [JS][jQuery]remove()与 empty()的区别
- js中的 innerhtml与jquery中的html()区别
- 清空标签间的内容(innerHTML)和 value
- innerHTML与jquery里的html()区别介绍
- innerHTML() 与html( )的区别
- jquery的元素的文本内容与HTML内容操作的区别
- 清空html的内容函数:
- jquery如何清空<input type="file"/>的内容
- jquery 清空file里的内容
- jQuery清空元素内容和设置css样式。
- js清空file选中的内容
- jQuery 清空div样式 $("#UserDivID").empty()
- SDK更新国内镜像
- Android使用Handler造成的内存泄露问题的解决
- tar压缩解压缩命令详解
- Spring.net之Asp.net mvc配置
- linux下tomcat启动时,项目部署三次
- [JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别:关于内容泄露问题
- Apple开发账号添加团队成员
- servlet文件下载2(单文件下载和批量下载)
- Linux 中 x86 的内联汇编
- 2014年年底突然参与了CSDN的博客之星评选
- Linux提权后获取敏感信息方法
- 虚拟机vmware网络设置
- 将在本地创建的Git仓库push到Git@OSC
- 串口通讯--传输速率和传输距离