jQuery嵌套可排序 - 在所有可用的UL中移动LI元素

21

我有以下代码,虽然它能够运行,但感觉速度比较慢。我的需求是允许将<li>自由地移动到现有的<ul>下或将其上移一级。我还想创建层次结构,因此如果您将一个<li>拖到另一个<li>下面,那么这将创建一个层次结构。我认为在这种情况下,必须在每个<li>下呈现一个<ul>。我只想限制它最多有2或3层。

$("#sort_list").sortable({
  containment: 'parent',                                                                                     
  axis: 'y',
  revert: true,
  opacity: 0.8
});
$(".sub_list").sortable({ 
  containment: 'parent',
  axis: 'y',
  revert: true,
  opacity: 0.8,
});
$("#sort_list").disableSelection();

<ul id="sort_list">
  <li>one</li>
  <li>two
    <ul class="sub_list">
    <li>sub one</li>
    <li>sub two</li>
    </ul>
  </li>
  <li>three</li>
  <li>four</li>
</ul>
4个回答

41

3
有些晚了,但我认为这可能就是它!发现得不错! - Jon
2
这个已经不再维护了。 - Tom
@Tom 看起来有人接管了开发工作。 - gorn
@Tom 我已经编辑了帖子以反映新的代码库。 - theycallmemorty

16

3
这个比gorn发布的更好。非常可定制化且运行完美。谢谢分享! - Dorian

6
我使用了 JQuery Interface plugin,它很容易设置并且在这个任务中表现得非常好(请查看演示),但是我想要更轻量级的东西,不需要额外的插件。

即使 JQuery UI 库中的可排序功能有点基本,你仍然可以以某种方式实现这个功能:

$("ul").sortable({
items:  '> li',
axis: 'y',
update: function (e, ui) {
    ...
}

这将允许您在任何“ul”下对“li”进行排序(如果我记得正确的话)。但是它不会让您将“li”元素从一个“ul”移动到另一个“ul”。即使可以这样做(更改配置),我发现它不太稳定,有点繁琐。我想出了一个简单的解决方案:一个“标志按钮”,它停用排序并启用移动...它的工作非常好!您需要做的就是在移动之前和之后跟踪“li”的父ID。我的5分建议。

你所指的功能有什么示例或来源? - Eric

1

2
这些选项都没有提供用户拖放创建层次结构或不同项目顺序的功能。我想要可排序的想法,但加入了层次结构选项,并具备将更改保存回服务器的能力。 - Jon
你有没有查看 jstree.com 中的拖放支持?看起来它具备你所需的功能。但是他们没有工作演示。你需要自己下载并配置它。 - Christopher Tokar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接