如何检查特定列表是否可排序?像$('#list').is(':sortable')
...?
如果我们将使用
if ($('#list').sortable())
然后列表将再次排序,而不是检查实际上是否可以排序。
答案 0 :(得分:40)
如果列表已经可以排序,那么它应该有类ui-sortable
。
您可以使用if ($('#list').hasClass('ui-sortable'))
进行检查。
答案 1 :(得分:10)
我刚刚发现,数据界面也是如此:
if ($( '#sortable' ).data( 'sortable' )) {
// sortable instance exists
}
答案 2 :(得分:7)
2012年之后jQuery版本发生了变化,所以现在你可以写:
if ($( '#sortable' ).data( 'ui-sortable' )) {
// sortable instance exists
}
或
if ($( '#sortable' ).is(':ui-sortable')) {
// sortable instance exists
}
答案 3 :(得分:2)
应用Sorting时,只需向该元素添加一个虚拟类,
$( "#sortable" ).sortable();
$( "#sortable" ).addClass("antguider");
然后,如果你想检查元素是否可排序,那么检查一下,
if($( "#sortable" ).hasClass("antguider")){
alert("Already Sort Applied");
}
答案 4 :(得分:2)
我在Safari(也许是其他人)中发现这些课程不可靠。 'ui-sortable'保留在任何已经可以排序的项目上,即使你禁用它也会导致类'ui-sortable ui-sortable-disabled'被使用。
我发现自己正在添加和删除这些课程,以确保它们符合我的预期。
if ($(this).hasClass("ui-sortable")) {
$(this).removeClass("ui-sortable");
$(this).sortable({ disabled: true });
}
else {
$(this).addClass("ui-sortable");
$(this).sortable({ disabled: false });
}
- 编辑
好的,所以这些类是可靠的,但我所追求的并没有被禁用,而是.sortable(“destroy”),它在初始化之前将元素返回到它的状态(即删除所有辅助类)。
因此,对于我的可排序切换(这是我正在创建的):
if ($(this).hasClass("ui-sortable")) $(this).sortable("destroy");
else $(this).sortable();
答案 5 :(得分:1)
您可以在这里https://stackoverflow.com/a/57549308/4175975
查看我的回答只需调用sortable的实例,如果返回未定义,则不会加载
if (typeof $("ul.sortable").sortable('instance') != 'undefined') {
//$.ui.sortable is loaded and called
} else {
//call sortable
}
答案 6 :(得分:0)
您还可以使用:
Sortable.get(element)
https://github.com/SortableJS/Sortable#sortablegetelementhtmlelementsortable
如果未附加可排序的实例,它将解析为undefined
。