如何检查jQuery UI插件是否附加到元素?例如,如果我加载.sortable小部件,它的存在如何确定?
这个问题背后的目的是我希望能够在元素上切换.sortable。由于能够看到.sortable存在,我可以调用.sortable('destroy')来删除它。
答案 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>