如何检查jQuery UI插件是否附加到元素?

时间:2009-11-05 08:10:58

标签: javascript jquery jquery-ui

如何检查jQuery UI插件是否附加到元素?例如,如果我加载.sortable小部件,它的存在如何确定?

这个问题背后的目的是我希望能够在元素上切换.sortable。由于能够看到.sortable存在,我可以调用.sortable('destroy')来删除它。

5 个答案:

答案 0 :(得分:13)

所有ui小部件都将其名称作为true附加到元素的容器数据中。 jqueryui还添加了一个数据过滤器表达式。

var $elem = $('div.sortable-container:data(sortable)');
if ($elem.length){
  // $elem contains list of elements that have sortable widget attached
}

答案 1 :(得分:5)

自jQuery UI 1.8以来,特殊选择器are being added to Sizzle for each widget。这些是:ui-widgetname

的形式

要检查元素上是否存在可排序小部件,可以使用:

if(element.is(':ui-sortable')) {
    element.sortable('destroy');
}

答案 2 :(得分:2)

如果有人在以后的jqueryUI版本中寻找这个解决方案,那么数据容器的可排序插件的名称现在是uiSortable而不是可排序的。我正在使用jQueryui 1.10

即找到你可以使用的元素

var $elem = $('#sortable-container:data(uiSortable)');

并找到尚未初始化的元素

var $elem = $('#sortable-container:not(:data(uiSortable))');

答案 3 :(得分:1)

所有UI小部件都被赋予了类ui-widget。通常,每个小部件还将小部件类添加到主元素。在这种情况下,您应该看到ui-sortable已添加到可排序容器中。

答案 4 :(得分:0)

只需调用sortable的实例,如果返回未定义,则不会加载

<pre>
if (typeof $("ul.sortable").sortable('instance') != 'undefined') {
    //$.ui.sortable is loaded and called
} else {
    //call sortable
}
</pre>