ily*_*oli 8 html javascript jquery dom
我真的很想知道jQuery 删除函数是否真的从DOM中删除了元素.
首先,我看了这里,但答案并不令人信服.
当我注意到我仍然可以操作我调用了删除函数的元素时,我遇到了这个问题.
我的代码:
<div id="container">
<div id="div">
This is a div
</div>
</div>
var div = $('#div');
$('#div').remove();
$('#container').append(div);
Run Code Online (Sandbox Code Playgroud)
注意:我的问题不是如何解决这个问题?但是我想知道这里发生了什么!
实际上,此代码不会从dom中删除#div,但如果我有任何数据设置为#div,它将丢失.我现在对删除函数的行为感到困惑.有人能解释一下吗?
DEMO
我确信div变量不只是dom元素的一个克隆,是对它的引用,因为当我操作div变量时,(比如div.html('something'))DOM中的div得到更新.
还是我错了?
Ror*_*san 14
remove() 确实从DOM中删除了元素.
但是在您的示例中,元素已缓存在内存中,因为您已将其分配给div变量.因此,您仍然可以使用它,并再次附加它,它仍将包含原始所做的所有事件.
如果你说的是对的,为什么我松开绑定到div的数据呢?
如果检查remove()的源代码,您将看到它调用内部cleanData函数,该函数删除事件并清除data元素的缓存.这就是你丢失信息的原因.
如果要从DOM中删除元素,但保留元素,请detach()改用.
这是一个显示差异的小提琴:http://jsfiddle.net/2VbmX/