jQuery ui 可排序:如何在允许所有项目 inter-sortable 的同时禁止组嵌套
jQuery ui sortable: How to disallow the nesting of groups while allowing all the items to be inter-sortable
我有以下使用 jQuery 的嵌套可排序代码:
HTML:
<div id="listContainer">
<ul>
<li class="listItem">Item 1</li>
<li class="listItem groupItem">
<ul>
<div class="groupTitle">Group A</div>
<li class="listItem">Item 2</li>
<li class="listItem">Item 3</li>
<li class="listItem">Item 4</li>
</ul>
</li>
<li class="listItem">Item 5</li>
<li class="listItem">Item 6</li>
<li class="listItem groupItem">
<ul>
<div class="groupTitle">Group B</div>
<li class="listItem">Item 7</li>
<li class="listItem">Item 8</li>
</ul>
</li>
<li class="listItem">Item 9</li>
</ul>
</div>
JS:
$( "#listContainer ul" ).sortable({
connectWith: "#listContainer ul",
placeholder: "itemPlaceholder",
cursor: 'move'
});
我目前面临两个问题:
- 如果我拖动组标题,它只会移动标题行,但我想移动整个组。
- 我不想允许组嵌套。目前您可以移动该组并将其嵌套在另一个组中,但只能移动项目。
我已经修改了你的DEMO并创建了一个NEW DEMO。
在此演示中:
- All the items are sortable from outer list to the group list and vice versa and the items can also be sorted among the the groups.
- The groups cannot be nested. An alert will popup if nesting of group is attempted
请注意,要实现此目的,您需要更改列表项的结构,正如您在演示中观察到的那样。
这是演示中的代码:
HTML:
<div id="listContainer">
<ul class="srtable">
<li class="listItem">Item 1</li>
<li class="listItem groupItem">
<div class="group">
<div class="groupTitle">Group A</div>
<div class="listItem">Item 2</div>
<div class="listItem">Item 3</div>
<div class="listItem">Item 4</div>
</div>
</li>
<li class="listItem">Item 5</li>
<li class="listItem">Item 6</li>
<li class="listItem groupItem">
<div class="group">
<div class="groupTitle">Group B</div>
<div class="listItem">Item 7</div>
<div class="listItem">Item 8</div>
</div>
</li>
<li class="listItem">Item 9</li>
</ul>
</div>
JS:
$( "#listContainer ul" ).sortable(
{
connectWith: ".group",
placeholder: "itemPlaceholder",
cursor: 'move'
}
);
$('.group').sortable({
items: "> div.listItem",
connectWith: ".srtable, .group",
receive: function( event, ui ) {
//alert('receive');
//console.log(ui);
//console.log(ui.item)
//console.log($(ui.item).attr('class'))
if ($(ui.item).hasClass('groupItem')) {
$(ui.sender).sortable("cancel");
alert('Sorry! Groups cannot be nested');
}
}
});
我有以下使用 jQuery 的嵌套可排序代码:
HTML:
<div id="listContainer">
<ul>
<li class="listItem">Item 1</li>
<li class="listItem groupItem">
<ul>
<div class="groupTitle">Group A</div>
<li class="listItem">Item 2</li>
<li class="listItem">Item 3</li>
<li class="listItem">Item 4</li>
</ul>
</li>
<li class="listItem">Item 5</li>
<li class="listItem">Item 6</li>
<li class="listItem groupItem">
<ul>
<div class="groupTitle">Group B</div>
<li class="listItem">Item 7</li>
<li class="listItem">Item 8</li>
</ul>
</li>
<li class="listItem">Item 9</li>
</ul>
</div>
JS:
$( "#listContainer ul" ).sortable({
connectWith: "#listContainer ul",
placeholder: "itemPlaceholder",
cursor: 'move'
});
我目前面临两个问题:
- 如果我拖动组标题,它只会移动标题行,但我想移动整个组。
- 我不想允许组嵌套。目前您可以移动该组并将其嵌套在另一个组中,但只能移动项目。
我已经修改了你的DEMO并创建了一个NEW DEMO。
在此演示中:
- All the items are sortable from outer list to the group list and vice versa and the items can also be sorted among the the groups.
- The groups cannot be nested. An alert will popup if nesting of group is attempted
请注意,要实现此目的,您需要更改列表项的结构,正如您在演示中观察到的那样。
这是演示中的代码:
HTML:
<div id="listContainer">
<ul class="srtable">
<li class="listItem">Item 1</li>
<li class="listItem groupItem">
<div class="group">
<div class="groupTitle">Group A</div>
<div class="listItem">Item 2</div>
<div class="listItem">Item 3</div>
<div class="listItem">Item 4</div>
</div>
</li>
<li class="listItem">Item 5</li>
<li class="listItem">Item 6</li>
<li class="listItem groupItem">
<div class="group">
<div class="groupTitle">Group B</div>
<div class="listItem">Item 7</div>
<div class="listItem">Item 8</div>
</div>
</li>
<li class="listItem">Item 9</li>
</ul>
</div>
JS:
$( "#listContainer ul" ).sortable(
{
connectWith: ".group",
placeholder: "itemPlaceholder",
cursor: 'move'
}
);
$('.group').sortable({
items: "> div.listItem",
connectWith: ".srtable, .group",
receive: function( event, ui ) {
//alert('receive');
//console.log(ui);
//console.log(ui.item)
//console.log($(ui.item).attr('class'))
if ($(ui.item).hasClass('groupItem')) {
$(ui.sender).sortable("cancel");
alert('Sorry! Groups cannot be nested');
}
}
});