jQuery 可排序防止用户将子项移动到父项
jQuery Sortable prevent user to move child item to parent item
我在 HTML 中有这个列表:
<ol class="sortable subcategory_item">
<li data-id="102">A</li>
<li data-id="111">B</li>
<li data-id="1712">GROUP A
<ol class="group_items">
<li data-id="105">GROUP MEMBER 1</li>
<li data-id="108">GROUP MEMBER 2</li>
<li data-id="109">GROUP MEMBER 3</li>
</ol>
</li>
<li data-id="110">C</li>
<li data-id="113">D</li>
</ol>
问题是我可以将 GROUP A
下的项目移动到它们的父级。
如何防止 GROUP MEMBER 1
、GROUP MEMBER 2
和 GROUP MEMBER 3
(或 <ol class="group_items">
内的项目移动到 GROUP A
上方?
我目前正在使用 jquery-sortable plugin,但如果我必须切换到另一个插件,我也可以。
这是演示
$("#sortable").sortable({
change: function(event, ui) {
var currentClass = $(ui.placeholder)[0].classList[0];
if (!$(ui.placeholder).prev().hasClass(currentClass) && !$(ui.placeholder).next().hasClass(currentClass))
return false;
}
});
$(".group_items").sortable();
$("#sortable").disableSelection();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-sortable/0.9.13/jquery-sortable-min.js"></script>
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script>
<ol class="sortable subcategory_item" id="sortable">
<li data-id="102" class="grp1">A</li>
<li data-id="111" class="grp1">B</li>
<li data-id="1712" class="grp1">GROUP A
<ol class="group_items">
<li data-id="105" class="grp">GROUP MEMBER 1</li>
<li data-id="108" class="grp">GROUP MEMBER 2</li>
<li data-id="109" class="grp">GROUP MEMBER 3</li>
</ol>
</li>
<li data-id="110" class="grp1">C</li>
<li data-id="113" class="grp1">D</li>
</ol>
您可以简单地使用 jQuery UI sortable,默认情况下它的行为方式是您想要的:
$('.sortable,.group_items').sortable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<ol class="sortable subcategory_item">
<li data-id="102">A</li>
<li data-id="111">B</li>
<li data-id="1712">GROUP A
<ol class="group_items">
<li data-id="105">GROUP MEMBER 1</li>
<li data-id="108">GROUP MEMBER 2</li>
<li data-id="109">GROUP MEMBER 3</li>
</ol>
</li>
<li data-id="110">C</li>
<li data-id="113">D</li>
</ol>
我在 HTML 中有这个列表:
<ol class="sortable subcategory_item">
<li data-id="102">A</li>
<li data-id="111">B</li>
<li data-id="1712">GROUP A
<ol class="group_items">
<li data-id="105">GROUP MEMBER 1</li>
<li data-id="108">GROUP MEMBER 2</li>
<li data-id="109">GROUP MEMBER 3</li>
</ol>
</li>
<li data-id="110">C</li>
<li data-id="113">D</li>
</ol>
问题是我可以将 GROUP A
下的项目移动到它们的父级。
如何防止 GROUP MEMBER 1
、GROUP MEMBER 2
和 GROUP MEMBER 3
(或 <ol class="group_items">
内的项目移动到 GROUP A
上方?
我目前正在使用 jquery-sortable plugin,但如果我必须切换到另一个插件,我也可以。
这是演示
$("#sortable").sortable({
change: function(event, ui) {
var currentClass = $(ui.placeholder)[0].classList[0];
if (!$(ui.placeholder).prev().hasClass(currentClass) && !$(ui.placeholder).next().hasClass(currentClass))
return false;
}
});
$(".group_items").sortable();
$("#sortable").disableSelection();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-sortable/0.9.13/jquery-sortable-min.js"></script>
<script src="https://code.jquery.com/ui/1.9.2/jquery-ui.min.js"></script>
<ol class="sortable subcategory_item" id="sortable">
<li data-id="102" class="grp1">A</li>
<li data-id="111" class="grp1">B</li>
<li data-id="1712" class="grp1">GROUP A
<ol class="group_items">
<li data-id="105" class="grp">GROUP MEMBER 1</li>
<li data-id="108" class="grp">GROUP MEMBER 2</li>
<li data-id="109" class="grp">GROUP MEMBER 3</li>
</ol>
</li>
<li data-id="110" class="grp1">C</li>
<li data-id="113" class="grp1">D</li>
</ol>
您可以简单地使用 jQuery UI sortable,默认情况下它的行为方式是您想要的:
$('.sortable,.group_items').sortable();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//code.jquery.com/ui/1.11.4/jquery-ui.js"></script>
<ol class="sortable subcategory_item">
<li data-id="102">A</li>
<li data-id="111">B</li>
<li data-id="1712">GROUP A
<ol class="group_items">
<li data-id="105">GROUP MEMBER 1</li>
<li data-id="108">GROUP MEMBER 2</li>
<li data-id="109">GROUP MEMBER 3</li>
</ol>
</li>
<li data-id="110">C</li>
<li data-id="113">D</li>
</ol>