如何检查特定列表是否可排序?比如$('#list').is(':sortable')
……?
如果我们将使用
if ($('#list').sortable())
然后列表将再次可排序,而不检查它是否实际上是可排序的。
如何检查特定列表是否可排序?比如$('#list').is(':sortable')
……?
如果我们将使用
if ($('#list').sortable())
然后列表将再次可排序,而不检查它是否实际上是可排序的。
如果列表已经是可排序的,那么它应该有 class ui-sortable
。
你可以if ($('#list').hasClass('ui-sortable'))
用来检查它。
我刚刚发现,它的数据接口也可以工作:
if ($( '#sortable' ).data( 'sortable' )) {
// sortable instance exists
}
2012 年之后 jQuery 版本发生了变化,所以现在你可以写:
if ($( '#sortable' ).data( 'ui-sortable' )) {
// sortable instance exists
}
或者
if ($( '#sortable' ).is(':ui-sortable')) {
// sortable instance exists
}
应用排序时,只需像这样向该元素添加一个虚拟类,
$( "#sortable" ).sortable();
$( "#sortable" ).addClass("antguider");
然后,如果要检查元素是否可排序,请像这样检查,
if($( "#sortable" ).hasClass("antguider")){
alert("Already Sort Applied");
}
我在 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();
你可以在这里查看我的答案https://stackoverflow.com/a/57549308/4175975
只调用一个sortable的实例,如果返回undefined,则不加载
if (typeof $("ul.sortable").sortable('instance') != 'undefined') {
//$.ui.sortable is loaded and called
} else {
//call sortable
}
您还可以使用:
Sortable.get(element)
https://github.com/SortableJS/Sortable#sortablegetelementhtmlelementsortable
undefined
如果没有附加可排序的实例,它会解析。