3

在 jQuery + jQuery UI 中,调用.remove()一个也配置了 resizable/draggable 的元素是否固有地调用.resizable('destroy')+ .draggable('destroy'),或者是一个可以正确清理所有内容的等效方法?在调用删除之前,我是否必须销毁可调整大小/可拖动的对象?

4

2 回答 2

1

取自 jQuery 的remove() 文档

与 类似.empty(),该.remove()方法从 DOM 中取出元素。.remove()当您想要删除元素本身以及其中的所有内容时使用。除了元素本身,所有与元素关联的绑定事件和 jQuery 数据都将被删除。要删除元素而不删除数据和事件,请.detach()改用。

所以据说,它也会删除可调整大小和可拖动的事件。可能 jQuery 可能会调用unbind()off()在从 DOM 中删除之前调用。

于 2013-04-23T16:37:51.163 回答
1

似乎您不需要在调用destroy之前调用函数removejQuery固有地.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固有地调用小部件上的事件。

下面是调用层次结构,

在此处输入图像描述

下面是小提琴http://jsfiddle.net/nxrzY/1/的快照

在此处输入图像描述

于 2013-04-24T16:47:03.603 回答