我希望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/