javascript - 嵌套 jQuery UI 可排序

标签 javascript jquery jquery-ui jquery-ui-sortable nested-sortable

有没有一种方法可以嵌套 jQuery 可排序项?就像在嵌套容器中一样,不是嵌套列表意义上的。

<div class="container">
    <div class="item"></div>
    <div class="item"></div>
    <div class="item"></div>
</div>
<div class="container">
    <div class="item"></div>
    <div class="container">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
    <div class="item"></div>
</div>

$('.container').sortable({
    connectWith: '.container'
});

http://jsfiddle.net/ExLqv/2/

该示例非常有效,但是当我删除嵌套容器时出现错误:

Uncaught HierarchyRequestError: A Node was inserted somewhere it doesn't belong. 

我猜这是因为当拖动 container 时,它位于鼠标下方,所以当我放下它时,它会尝试将它放入自己内部。

我有一个解决方法,虽然不是很理想,所以问题仍然存在。

$('.container').sortable({
    connectWith: '.container:not(.ui-sortable-helper)',
    tolerance: "pointer",
    cursorAt: { left: -50 }
});

http://jsfiddle.net/ExLqv/8/

最佳答案

问题

当一个元素既是可排序容器又是可排序容器中的可排序元素时,jQuery 会丢失它。

解决方案

就像将有问题的对象包装在另一个元素中一样简单。 fiddle :http://jsfiddle.net/ExLqv/12/

“内部”容器是这样包装的:

<div class="container-wrapper">
    <div class="container">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
</div>

您避免了这个问题,因为内部容器本身不再是可排序容器和可排序容器中的可排序对象。相反,可排序对象现在是包装器。 请注意,类名 container-wrapper 只是为了说明。您可以删除它,它不会改变功能。

现在,我不知道这种方法是否比您自己提到的解决方法更适合您。我确实觉得有必要采取某种解决方法。很多人都遇到过这个问题,而且目前似乎普遍认为嵌套排序不支持此功能。如果我用谷歌搜索“jquery sortable nested”,根据结果判断,似乎有很多插件可以为您解决问题 :)

关于javascript - 嵌套 jQuery UI 可排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19129476/

相关文章:

javascript - pjax 仍然会重新加载整页

javascript - jQuery:选择 tr 中的每个 td

javascript - 如何让 &lt;input type ="date"> 支持所有浏览器?还有其他选择吗?

javascript - 不使用 url 将值从前端传递到后端

javascript - 创建一个 firebase 函数以在数据库中设置负服务器时间戳但保持 NaN

javascript - 在 Angular Controller 中注册 Bootstrap 事件处理程序

jquery - 如何为 jQuery UI 进度条的值设置动画?

javascript - 使用来自 asp WebMethod 的数据填充 jquery 自动完成

javascript - 在浏览器/选项卡关闭时结束 session

javascript - 使用js函数在html中添加/删除一个类