在jQuery + jQuery UI中,在一个也配置了resizable / draggable的元素上调用.remove()
本身就调用.resizable('destroy')
+ .draggable('destroy')
,或者是一个正确清理所有内容的等效方法吗?在调用remove之前,我是否必须销毁resizable / draggables?
答案 0 :(得分:1)
取自jQuery的remove() docs:
与
.empty()
类似,.remove()
方法从DOM中获取元素。如果要删除元素本身及其中的所有内容,请使用.remove()
。 除了元素本身之外,还会删除与元素关联的所有绑定事件和jQuery数据。要删除元素而不删除数据和事件,请改用.detach()
。
所以据说,它会删除可调整大小和可拖动的事件。在从DOM中删除之前,jQuery可能会调用unbind()
或off()
。
答案 1 :(得分:1)
在调用destroy
之前,您似乎无需调用remove
函数。 jQuery .remove
触发.destroy
本身。我无法在任何地方找到这个记录,我很惊讶地发现了这一点。
当包含jQuery UI
时,库会覆盖jQuery的cleanData
函数以包含触发.remove
事件的代码。 (https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.widget.js#L16)
检查此演示 - http://jsfiddle.net/UMYzD - 调用.remove
函数时调用.remove
处理程序。现在从左侧窗格(http://jsfiddle.net/UMYzD/1)取消选中jQuery UI,您会看到在调用.remove
时不再触发.remove
事件处理程序。
$.cleanData = function( elems ) {
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
try {
$( elem ).triggerHandler( "remove" );
// http://bugs.jquery.com/ticket/8235
} catch( e ) {}
}
_cleanData( elems );
};
行$( elem ).triggerHandler( "remove" );
触发小部件绑定在该元素上的.remove
事件,并且它本身就在小部件上调用.destroy
。
以下是调用层次结构
以下是来自小提琴http://jsfiddle.net/nxrzY/1/
的快照