jQuery删除也会破坏resizables / draggables吗?

时间:2013-04-11 01:59:37

标签: jquery jquery-ui jquery-ui-draggable jquery-ui-resizable

在jQuery + jQuery UI中,在一个也配置了resizable / draggable的元素上调用.remove()本身就调用.resizable('destroy') + .draggable('destroy'),或者是一个正确清理所有内容的等效方法吗?在调用remove之前,我是否必须销毁resizable / draggables?

2 个答案:

答案 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

以下是调用层次结构

enter image description here

以下是来自小提琴http://jsfiddle.net/nxrzY/1/

的快照

enter image description here