使用jQuery UI 1.8.2的可排序+嵌套列表

Alt*_*eus 25 jquery jquery-ui jquery-ui-sortable

这个问题已经过去了,但似乎没有人像我一样遇到同样的问题.

当我做这样的事情

$(function(){
    $('#unique-ul').sortable({items:'li'});
});
Run Code Online (Sandbox Code Playgroud)

我希望它"只是工作".总的来说,确实如此.我可以将任何<li>从任何列表拖到任何其他列表,并且用它拖动<li>的任何子列表.

然而,在拖动时,它似乎真的很困惑它应该被丢弃的位置.这是一个使用1.8.0的例子; 它显示相同的行为.

http://jsbin.com/ewuxi3/

我发现的所有其他响应让我相信jQuery UI支持这种行为; 例如,这是针对嵌套draggables针对1.7注册的错误:http://dev.jqueryui.com/ticket/4333

我找不到其他有这个问题的人所以它暗示我做错了.有线索吗?

mjs*_*tti 78

发生这种情况是因为Sortable并不真正知道您是在嵌套之上还是在嵌套之上<li>.一种解决方案是使用这样的结构:

<ul>
  <li><div>Item 1</div>
    <ul>
      <li><div>Subitem 1</div></li>
      <li><div>Subitem 2</div></li>
    </ul>
  </li>
  <li><div>Item 2</div></li>
  <li><div>Item 3</div></li>
</ul>
Run Code Online (Sandbox Code Playgroud)

并设置选项toleranceElement: '> div'.我不知道为什么它没有记录,但它在那里它告诉Sortable只考虑<div>计算交叉点的时间.

如果您感兴趣,我最近开发了一个插件,使嵌套排序更容易,允许动态创建新的嵌套列表.

  • 你的插件看起来很棒 - 我玩了一个演示版本,当我有空闲时刻时,我会看看自己实现它. (4认同)
  • 这看起来是BOSS。我花了整个下午的时间试图找到像这样简单但真正有效的东西!谢谢你! (2认同)