2012-07-22 49 views
17

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

如果我们将使用

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

则列表将进行再次排序,而不是检查实际上它是排序。

+1

可能重复的[查找有jQuery小部件初始化对他们的元素](http://stackoverflow.com/questions/11251765/find-元素 - 其具备的,jQuery的窗口小部件初始化-在-它们)。只需使用'data(“sortable”)'而不是'data(“fileupload”)'。 – 2012-07-22 11:34:38

回答

38

如果列表已经可以排序,那么它应该有类ui-sortable

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

+0

如果页面从数据库重新加载,并且所附的类保存了html,则它不起作用。然而,jebbie建议的方法在从db重新加载页面时是完美无瑕的。 – arkoak 2013-09-29 08:34:28

1

当应用排序,只需添加一个虚拟类,像这样的元素,

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

然后,如果你要检查的元素排序,然后检查这个样子,

if($("#sortable").hasClass("antguider")){ 
    alert("Already Sort Applied"); 
} 
+2

为什么在可排序小部件已添加'ui-sortable'类时添加额外的不需要的类? – 2013-09-12 14:59:00

+1

如果任何可能排序的未来版本更改类名称,该解决方案仍然有效。 – Asaf 2015-01-20 11:33:09

+0

好,而不是使用我自己的班级,我宁愿让我的班级检查可配置,如果它改变,我只改变配置和巴姆,再次运作..永远不会重新发明轮子,简洁的标记应该始终是目标 – jebbie 2016-03-15 17:12:30

10

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

if ($('#sortable').data('sortable')) { 
    // sortable instance exists 
} 
+2

但我不得不说...我相信最新的jQuery版本,这是行不通的(我不得不将我的最新项目中的所有代码实例更改为css-class-detection) – jebbie 2013-11-04 13:25:32

+0

感谢这对我有用。 – 2016-03-15 13:30:00

2

我在Safari中发现(也许是其他人)t他班不可靠。 '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(“毁灭”),它返回到它的初始化到之前状态的元素(即删除所有助手类)。

所以我排序的切换(这是我创建的):

if ($(this).hasClass("ui-sortable")) $(this).sortable("destroy"); 
else $(this).sortable(); 
6

有2012年后的jQuery版本的变化,所以现在你可以这样写:

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

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