[JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别 、remove()区别

清空元素html("")、innerHTML="" 与 empty()的区别

一、清空元素的区别
     1、错误做法一:
           $("#test").html("");//该做法会导致内存泄露

     2、错误做法二:
           $("#test")[0].innerHTML="";  ;//该做法会导致内存泄露
     3、正确做法:
	       //$("#test").empty();

二、原理:

在 jquery 中用 innerHTML 的方法来清空元素,是必然会导致内存泄露的,由于 jquery 对于同一元素多事件处理没有直接采用浏览器事件模型,而是自己缓存事件,遍历触发,以及便于 trigger 程序触发 :

  1. // Init the element‘s event structure
  2. var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
  3. handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
  4. // Handle the second event of a trigger and when
  5. // an event is called after a page has unloaded
  6. return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
  7. jQuery.event.handle.apply(arguments.callee.elem, arguments) :
  8. undefined;
  9. });

采用 data 方法,将一些数据关联到了元素上面,上述事件即是采用该机制缓存事件监听器。

那么就可以知道,直接 innerHTML=“” 而不通知 jquery 清空与将要删除元素关联的数据,那么这部分数据就再也释放不了了,即为内存泄露。

  1. remove: function( selector ) {
  2. if ( !selector || jQuery.filter( selector, [ this ] ).length ) {
  3. // Prevent memory leaks
  4. jQuery( "*", this ).add([this]).each(function(){
  5. jQuery.event.remove(this);
  6. jQuery.removeData(this);
  7. });
  8. if (this.parentNode)
  9. this.parentNode.removeChild( this );
  10. }
  11. },
  12. empty: function() {
  13. // Remove element nodes and prevent memory leaks
  14. jQuery(this).children().remove();
  15. // Remove any remaining nodes
  16. while ( this.firstChild )
  17. this.removeChild( this.firstChild );
  18. }

三、要用到移除指定元素的时候,发现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

时间: 2024-12-08 04:32:51

[JS][jQuery]清空元素html("")、innerHTML="" 与 empty()的区别 、remove()区别的相关文章

[JS][jQuery]清空元素html(&quot;&quot;)、innerHTML=&quot;&quot; 与 empty()的区别:关于内容泄露问题

清空元素html("").innerHTML="" 与 empty()的区别 一.清空元素的区别      1.错误做法一:            $("#test").html("");//该做法会导致内存泄露 2.错误做法二:            $("#test")[0].innerHTML="";  ;//该做法会导致内存泄露 3.正确做法:        //$("

js jquery插入元素后事件会被注销

  js jquery插入元素后事件会被注销 document.body.innerHTML += <div id="dd">test</div>  //这个会注销事件 $(document.body).append(str);//使用这个 也可以绑定事件. 例子: //快捷键双击 $(".app_shortcut_item").dblclick(function () { var id = $(this).attr("id&quo

js jquery 获取元素(父节点,子节点,兄弟节点),元素筛选

转载:https://www.cnblogs.com/ooo0/p/6278102.html js jquery 获取元素(父节点,子节点,兄弟节点) 一,js 获取元素(父节点,子节点,兄弟节点) var test = document.getElementById("test"); var parent = test.parentNode; // 父节点 var chils = test.childNodes; // 全部子节点 var first = test.firstChil

js/jquery获取元素,元素筛选器

1.js获取元素 var test = document.getElementById("test"); var parent = test.parentNode; // 父节点 var chils = test.childNodes; // 全部子节点 var first = test.firstChild; // 第一个子节点 var last = test.lastChile; // 最后一个子节点 var previous = test.previousSbiling; //

js jquery 获取元素(父节点,子节点,兄弟节点)

一,js 获取元素(父节点,子节点,兄弟节点) var test = document.getElementById("test"); var parent = test.parentNode; // 父节点 var chils = test.childNodes; // 全部子节点 var first = test.firstChild; // 第一个子节点 var last = test.lastChile; // 最后一个子节点 var previous = test.previ

js/jquery设置元素隐藏和显示

//js 元素隐藏 document.getElementById('li11').style.display = 'none'; //js 元素显示 document.getElementById('li11').style.display = 'block'; //jquery元素隐藏 $('#li11').hide(); //jquery元素显示 $('#li11').show(); //还有一种方法,在css中设置 .hide{ display: none; } 然后通过js $('#l

JS/JQuery获取元素

一.Javascript获取select下拉框选中的的值 I:javascript原生的方法   1:拿到select对象: var  myselect=document.getElementById("test"); var myselect = document.all["test"];   2:拿到选中项的索引:var index=myselect.selectedIndex ;             // selectedIndex代表的是你所选中项的in

JS + jQuery 实现元素自动滚动到底部,兼容IE、FF、Chrome

HTML代码: <ul class="tasklog-dialog-ul" id="auto_to_bottom"> <li>删除虚拟机快照成功</li> <li>删除虚拟机快照成功</li> <li>删除虚拟机快照成功</li> <li>删除虚拟机快照成功</li> <li>删除虚拟机快照成功</li> <li>删除虚拟机

js中的innerText、innerHTML、属性值、value与jQuery中的text()、html()、属性值、val()总结

js与jQuery获取text.html.属性值.value的方法是不一样的. js与jQuery,text与innerText获取(<!---->中为结果) html: <p id="test">这是段落中的 <b>粗体</b> 文本.</p> <button id="btn10">jQuery显示text</button> <!--Text: 这是段落中的 粗体 文本.--