8

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

我的代码:

<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'))DOM 中的div会更新。
还是我错了?

4

2 回答 2

14

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

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

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

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

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

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

于 2012-05-23T09:00:24.850 回答
2

必须删除分配的变量:

delete div;
于 2012-05-23T12:32:54.173 回答