我正在使用带有 isAllowed 条件的nestedSortable:
$('ol.nestedSortable').nestedSortable({
forcePlaceholderSize: true,
handle: 'div',
helper: 'clone',
connectWith: 'ol.item-tree', //!
items: 'li',
opacity: .6,
placeholder: 'placeholder',
revert: 250,
tabSize: 25,
tolerance: 'pointer',
toleranceElement: '> div',
maxLevels: 0,
isTree: true,
expandOnHover: 700,
startCollapsed: true,
isAllowed: function (item, parent) {
if (!parent.attr('accepttypes')) {
return true;
}
if (parent.attr('accepttypes') == "none") {
return false;
}
if (parent.attr('accepttypes').indexOf(item.attr('type')) >= 0) {
return true;
}
return false;
},
....
但 isAllowed 仅适用于单个树。当被拖到另一棵树(由connectWith定义)时,即使不满足条件,也可以将li拖放到树的根(和其他一些地方)。然后我意识到可以将li拖到它自己的树根也符合条件。