Как проверить, подключен ли jQuery UI-плагин к элементу?

Как проверить, подключен ли jQuery UI-плагин к элементу? Например, если я загружаю виджет .sortable, как определить его присутствие?

Цель этого вопроса заключается в том, что мне хотелось бы переключить .sortable на элементы. С возможностью видеть, что .sortable присутствует, я мог бы затем вызвать .sortable( "destroy" ), чтобы удалить его.

Ответ 1

Все виджеты ui присоединяют свое имя как true к данным контейнера элемента. jqueryui также добавляет выражение фильтра данных.

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

Ответ 2

Так как jQuery UI 1.8, специальные селекторы добавляются в Sizzle для каждого виджета. Они находятся в форме :ui-widgetname.

Чтобы проверить наличие сортируемого виджета на элементе, вы можете использовать:

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

Ответ 3

Если кто-то ищет это решение в более поздних версиях jqueryUI, имя контейнера данных сортируемого плагина теперь является uiSortable и не сортируется. Im с использованием jQueryui 1.10

Чтобы найти элементы u, можно использовать

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

и найти элементы, которые еще не инициализированы

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

Ответ 4

Все виджеты пользовательского интерфейса имеют класс ui-widget. Обычно каждый виджет также добавляет класс виджетов к основному элементу. В этом случае вы должны увидеть ui-sortable, добавленный в сортируемый контейнер.

Ответ 5

Просто вызовите экземпляр sorttable, если return undefined, то не загружен

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