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

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

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

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

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

从jQuery UI 1.8开始, 每个小部件都会为Sizzle添加特殊选择器。 它们的forms为:ui-widgetname

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

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

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

即找到你可以使用的元素

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

并找到尚未初始化的元素

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

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