我希望jQuery UI Sortable中的一行仅在具有cansort类时才可排序。我将其设置为cancel: ':not(.cansort)',但它拒绝让我对所有内容进行排序,包括具有cansort类的行。

我知道我可以显式添加一个禁用的类,但是我将cansort类用于其他目的,这意味着每次我进行可排序的操作时,都必须删除该禁用的类并添加cansort类。我不想每次将某物切换为可排序时都必须添加和删除类。

我不想限制items属性中的可排序内容,因为每个元素都是可排序的,而我只能使用cansort类动态地将其打开和关闭。

最佳答案

原因是cancel小部件(几个jQueryUI小部件用来处理鼠标事件的小部件)处理ui.mouse选项的方式。签出this line of code

elIsCancel = (typeof this.options.cancel == "string"
    && event.target.nodeName ?
        $(event.target).closest(this.options.cancel).length : false);


这意味着您的选择器在closest所在的元素上使用mousedown运行。因此,让我们使用一个li.cansort可排序项目。这将生成一个类似于以下内容的jQuery选择器:

$("li.cansort").closest(":not(.cansort)").length;


这将始终返回1的长度,因为所有可排序ul的父级li没有.cansort类。这意味着使用这种选择器,排序将始终被取消。

幸运的是,如果仅在cancel选择器中包含标签名称,则很容易解决:

cancel: "li:not(.cansort)"


这是一个示例:http://jsfiddle.net/7hSnc/(尝试从li选择器中删除cancel

关于jquery - 为什么负选择器在jQuery UI Sortable的'cancel'属性中不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8591300/

10-09 14:55