我找到了这个greate插件: https://johnny.github.io/jquery-sortable/
我希望有可能将愚蠢的元素丢给每个孩子。我尝试过这样做,添加一个空的<ol></ol>
但是dosnt可以在运行时运行。在构建可排序树之前,我必须这样做。但我动态地做了一切。
根据文件:
名称:下降
默认值:true description:如果为true,则可以将项目拖入此容器
所以我明白它应该是开箱即用的方式吗?
请帮忙。
答案 0 :(得分:1)
我明白了。
工作解决方案:
$("ol.sortable").sortable({
// animation on drop
onDrop: function (item, targetContainer, _super) {
var clonedItem = $('<li/>').css({height: 0})
item.before(clonedItem)
clonedItem.animate({'height': item.height()})
item.animate(clonedItem.position(), function () {
clonedItem.detach()
_super(item)
})
}
})
我认为删除这个片段:
group: 'simple_with_animation',
pullPlaceholder: false,
来自配置的帮助。
答案 1 :(得分:0)
看起来嵌套列表仅在li
元素在插件初始化时具有嵌套容器(ol
或ul
)时才有效。
您提到过动态构建树。因此,每次在树中添加新的li
时,都需要执行以下行以使新节点可嵌套:
$li.removeData('subContainers');
只确保li
有ol
或ul
,即:
<ol class="sortable">
...
<li>
Your New Node
<ol></ol>
</li>
...
</ol>
现在,为什么$li.removeData('subContainers');
行确实有效?
查看the plugin code内部您可能会注意到,当插件决定是否允许在列表项中放置时,它会调用方法hasChildGroup
(see line 506), ,调用另一个方法getContainerGroup
(see line 572),计算并存储有关子节点的信息,以及正在悬停的节点的可能丢弃目标。计算仅发生一次,每次后续丢弃尝试都将重复使用此数据。
这正是我们应该从节点的data
中攻击并删除此信息,以使其下次重新计算数据。
'subContainers'
is the key that the plugin uses获取信息并找到可能的放弃目标。因此,应该从节点的data
中删除具有该密钥的条目。