在 jQuery + jQuery UI 中,调用.remove()
一个也配置了 resizable/draggable 的元素是否固有地调用.resizable('destroy')
+ .draggable('destroy')
,或者是一个可以正确清理所有内容的等效方法?在调用删除之前,我是否必须销毁可调整大小/可拖动的对象?
2 回答
取自 jQuery 的remove() 文档:
与 类似
.empty()
,该.remove()
方法从 DOM 中取出元素。.remove()
当您想要删除元素本身以及其中的所有内容时使用。除了元素本身,所有与元素关联的绑定事件和 jQuery 数据都将被删除。要删除元素而不删除数据和事件,请.detach()
改用。
所以据说,它也会删除可调整大小和可拖动的事件。可能 jQuery 可能会调用unbind()
或off()
在从 DOM 中删除之前调用。
似乎您不需要在调用destroy
之前调用函数remove
。jQuery固有地.remove
触发.destroy
。我在任何地方都找不到这个文档,我很惊讶地发现了这一点。
当include 时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
固有地调用小部件上的事件。
下面是调用层次结构,