我真的想知道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中更新。
或者我错了吗?
答案 0 :(得分:14)
remove()
确实从DOM中删除了该元素。
但是在您的示例中,元素已缓存在内存中,因为您已将其分配给div
变量。因此,您仍然可以使用它,并再次附加它,它仍将包含原始所有事件。
如果你说的是对的,为什么我会松开绑定到div的数据?
如果您检查source for remove(),您会看到它调用内部cleanData
函数,该函数会删除事件并清除元素的data
缓存。这就是你丢失信息的原因。
如果要从DOM中删除元素,但保留元素,请改用detach()
。
这是一个显示差异的小提琴:http://jsfiddle.net/2VbmX/
答案 1 :(得分:2)
必须删除指定的变量:
delete div;