如何检查列表是否可排序?

时间:2012-07-22 11:10:07

标签: javascript jquery jquery-ui jquery-ui-sortable

如何检查特定列表是否可排序?像$('#list').is(':sortable') ...?

如果我们将使用

if ($('#list').sortable()) 

然后列表将再次排序,而不是检查实际上是否可以排序。

7 个答案:

答案 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