jQuery删除函数真的删除了Dom元素吗?

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/