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

时间:2012-05-23 08:58:43

标签: javascript jquery html dom

我真的想知道jQuery remove 函数是否真的从DOM中删除了元素。
首先,我看了here,但答案并不令人信服 当我注意到我仍然可以操作我称之为删除功能的元素时,我遇到了这个问题。

我的代码:

<div id="container">
    <div id="div">
        This is a div
    </div>
</div>

var div = $('#div');
$('#div').remove();
$('#container').append(div);

注意:我的问题不是如何解决这个问题?但我想了解这里发生了什么!

实际上,此代码不会从dom中删除#div,但如果我将任何数据设置为#div,它将会丢失。我现在对删除功能的行为感到困惑。有人能解释一下吗? DEMO

我确信div变量不仅仅是dom元素的克隆,而是对它的引用,因为当我操纵div变量时(如 div.html('something') div 在DOM中更新。
或者我错了吗?

2 个答案:

答案 0 :(得分:14)

remove()确实从DOM中删除了该元素。

但是在您的示例中,元素已缓存在内存中,因为您已将其分配给div变量。因此,您仍然可以使用它,并再次附加它,它仍将包含原始所有事件。

  

如果你说的是对的,为什么我会松开绑定到div的数据?

如果您检查source for remove(),您会看到它调用内部cleanData函数,该函数会删除事件并清除元素的data缓存。这就是你丢失信息的原因。

如果要从DOM中删除元素,但保留元素,请改用detach()

这是一个显示差异的小提琴:http://jsfiddle.net/2VbmX/

答案 1 :(得分:2)

必须删除指定的变量:

delete div;