jQuery sortable – 在2个连接列表之间移动项目保持计数
我有两个列表,包含6个项目,connectedwith一个类.connectedSortable
当我在两个列表之间移动一个项目时,它会被附加到目标列表,并从源列表中删除。 所以现在我们有一个包含5个项目的列表,以及一个包含7个项目的列表。 每个列表中的项目如何保留6个项目,我们只是将目标列表中最顶层的项目移动到第一个列表(自动按照与列表相同的顺序重新排列)?
- Item 1
- Item 2
- Item 3
- Item 4
- Item 5
- Item 6
- Item 1
- Item 2
- Item 3
- Item 4
- Item 5
- Item 6
$( ".connectedSortable" ).sortable({ connectWith: ".connectedSortable" }).disableSelection();
澄清:列表的数量可以是2或更多。 但我所追求的是每个列表固定数量为6个项目,如果它是单个列表,则可以自动重新排序。 例如,如果在项目4之后将项目3从list1移动到list2,那么结果应为:
- Item 1
- Item 2
- Item 4
- Item 5
- Item 6
- Item 1
- Item 2
- Item 3
- Item 4
- Item 3
- Item 5
- Item 6
的jsfiddle
您可以使用receive
选项执行此操作。 以下代码假定有许多
元素, id="ulX"
,其中X
是从1开始的整数序列:
$(function() { $( ".connectedSortable" ).sortable({ connectWith: ".connectedSortable", receive: function (event, ui) { var targetul = $(ui.item).parent().attr("id"); var targetno = parseInt(targetul.split("ul")[1]); var sourceul = $(ui.sender).attr("id"); var sourceno = parseInt(sourceul.split("ul")[1]); if (sourceno > targetno) rippleUp(targetno, sourceno); else rippleDown(targetno, sourceno); } }).disableSelection(); }); function rippleUp(start, end) { for (var i=start;i li").last().prependTo("#ul"+(i+1)); } } function rippleDown(start, end) { for (var i=start;i>end;i--) { $("#ul"+i+" > li").first().appendTo("#ul"+(i-1)); } }