jQuery Sortable如何将所有子项设置为放置目标

时间:2014-12-12 21:17:17

标签: jquery-ui-sortable jquery-draggable jquery-droppable

我找到了这个greate插件: https://johnny.github.io/jquery-sortable/

我希望有可能将愚蠢的元素丢给每个孩子。我尝试过这样做,添加一个空的<ol></ol>但是dosnt可以在运行时运行。在构建可排序树之前,我必须这样做。但我动态地做了一切。

根据文件:

  

名称:下降
  默认值:true   description:如果为true,则可以将项目拖入此容器

所以我明白它应该是开箱即用的方式吗?

请帮忙。

2 个答案:

答案 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元素在插件初始化时具有嵌套容器(olul)时才有效。

您提到过动态构建树。因此,每次在树中添加新的li时,都需要执行以下行以使新节点可嵌套:

$li.removeData('subContainers');

只确保liolul,即:

<ol class="sortable">
    ...
    <li>
        Your New Node
        <ol></ol>
    </li>
    ...
</ol>

现在,为什么$li.removeData('subContainers');行确实有效? 查看the plugin code内部您可能会注意到,当插件决定是否允许在列表项中放置时,它会调用方法hasChildGroupsee line 506), ,调用另一个方法getContainerGroupsee line 572),计算并存储有关子节点的信息,以及正在悬停的节点的可能丢弃目标。计算仅发生一次,每次后续丢弃尝试都将重复使用此数据。

这正是我们应该从节点的data中攻击并删除此信息,以使其下次重新计算数据。

'subContainers' is the key that the plugin uses获取信息并找到可能的放弃目标。因此,应该从节点的data中删除具有该密钥的条目。