24

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

如果我们将使用

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

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

4

7 回答 7

46

如果列表已经是可排序的,那么它应该有 class ui-sortable

你可以if ($('#list').hasClass('ui-sortable'))用来检查它。

于 2012-07-22T11:37:50.967 回答
11

我刚刚发现,它的数据接口也可以工作:

if ($( '#sortable' ).data( 'sortable' )) {
    // sortable instance exists
}
于 2012-10-21T00:27:31.043 回答
7

2012 年之后 jQuery 版本发生了变化,所以现在你可以写:

if ($( '#sortable' ).data( 'ui-sortable' )) {
    // sortable instance exists
}

或者

if ($( '#sortable' ).is(':ui-sortable')) {
    // sortable instance exists
}
于 2015-07-16T07:01:37.357 回答
2

应用排序时,只需像这样向该元素添加一个虚拟类,

$( "#sortable" ).sortable();
$( "#sortable" ).addClass("antguider");

然后,如果要检查元素是否可排序,请像这样检查,

if($( "#sortable" ).hasClass("antguider")){
    alert("Already Sort Applied");
}
于 2012-07-22T11:41:20.453 回答
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();
于 2013-11-21T16:17:39.287 回答
2

你可以在这里查看我的答案https://stackoverflow.com/a/57549308/4175975

只调用一个sortable的实例,如果返回undefined,则不加载

if (typeof $("ul.sortable").sortable('instance') != 'undefined') {
    //$.ui.sortable is loaded and called
} else {
    //call sortable
}
于 2019-08-19T00:39:41.453 回答
0

您还可以使用:

Sortable.get(element)

https://github.com/SortableJS/Sortable#sortablegetelementhtmlelementsortable

undefined如果没有附加可排序的实例,它会解析。

于 2020-05-19T21:42:35.743 回答