jquery-sortable不稳定child排序

jquery-sortable unstable child sorting

我正在尝试使用 jquery-sortable,主要用于嵌套和排序项目。 在第一层和第一项child,它可以很好地进行嵌套和排序。然而,第二个和后续项目的 childs 可能无法排序。

<div class="card-body">
  <ul class="list-group sortable">
    <li class="list-group-item">
      First
      <ul class="list-group">
        <li class="list-group-item">
          First Child 1
        </li>
        <li class="list-group-item">
          First Child 2
        </li>
        <li class="list-group-item">
          First Child 3
        </li>
      </ul>
    </li>
    <li class="list-group-item">
      Second
      <ul class="list-group">
        <li class="list-group-item">
          Second Child 1
        </li>
        <li class="list-group-item">
          Second Child 2
        </li>
        <li class="list-group-item">
          Second Child 3
        </li>
      </ul>
    </li>
    <li class="list-group-item">
      Third
      <ul class="list-group">
        <li class="list-group-item">
          Third Child 1
        </li>
        <li class="list-group-item">
          Third Child 2
        </li>
        <li class="list-group-item">
          Third Child 3
        </li>
      </ul>
    </li>
  </ul>


$(function() {
  $("ul.sortable").sortable({
    group: 'List'
  });
});

这是 fiddle 来演示这个 https://jsfiddle.net/2p17v6xs/

我不确定我做错了什么。

玩过你的 fiddle 后,我注意到它在没有 bootstrap 的情况下也能正常工作:.list-group-item 有一种风格 position:relative,它似乎是嵌套容器的父级不能包含 position: relative:它可能会扰乱位置计算,库似乎无法计算具有 "position:relative" 的容器的位置。这可能是 lib 本身的问题。要解决它,您可以:

  • 解决lib

  • 向 bootstrap 添加黑客:

Html:

<div class="card-body">
  <ul class="list-group sortable">
    <li class="list-group-item no-position">
      First
      <ul class="list-group">
        <li class="list-group-item">
          First Child 1
        </li>
        <li class="list-group-item">
          First Child 2
        </li>
        <li class="list-group-item">
          First Child 3
        </li>
      </ul>
    </li>
    <li class="list-group-item no-position">
      Second
      <ul class="list-group">
        <li class="list-group-item">
          Second Child 1
        </li>
        <li class="list-group-item">
          Second Child 2
        </li>
        <li class="list-group-item">
          Second Child 3
        </li>
      </ul>
    </li>
    <li class="list-group-item no-position">
      Third
      <ul class="list-group">
        <li class="list-group-item">
          Third Child 1
        </li>
        <li class="list-group-item">
          Third Child 2
        </li>
        <li class="list-group-item">
          Third Child 3
        </li>
      </ul>
    </li>
  </ul>

CSS:

    .no-position:not(.dragged) {
      position: initial;
    }

我想不出别的办法了。