javascript - jQuery:固定长度、连接、可排序列表

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

我有一个列表,分为三列,如下所示:

Column1 Column2 Column3
1       4       7
2       5       8
3       6       9

列表从 1 到 9 连续,每列都有固定的行数 (3)。我希望允许用户对列表重新排序,同时保持固定长度的列(3 行)。

通过 jQuery 使列表可排序相当容易。

HTML

< ul class="sortable" id="column1">
    < li class="section">1< /li>
    < li class="section">2< /li>
    < li class="section">3< /li>
< /ul>
< ul class="sortable" id="column2">
    < li class="section">4< /li>
    < li class="section">5< /li>
    < li class="section">6< /li>
< /ul>
< ul class="sortable" id="column3">
    < li class="section">7< /li>
    < li class="section">8< /li>
    < li class="section">9< /li>
< /ul>

Javascript

$('#column1').sortable({
    connectWith: ".sortable",
    items : ".section"
    });
$('#column2').sortable({
    connectWith: ".sortable",
    items : ".section"
    });
$('#column3').sortable({
    connectWith: ".sortable",
    items : ".section"
    });

这允许我在列表之间拖放,但我不确定如何保持列长度。使用此方法,每个列表都会随着项目的移动而增大和缩小。关于完成此任务的好方法有什么建议吗?

使用完整解决方案进行编辑

感谢两位的回复,我得到了完整的解决方案。在我的问题中,我忽略了每一列中都有一个标题。

HTML

< ul class="sortable" id="column1">
    < li class="header">Header< /li>
    < li class="section">1< /li>
    < li class="section">2< /li>
    < li class="section">3< /li>
< /ul>
< ul class="sortable" id="column2">
    < li class="header">Header< /li>
    < li class="section">4< /li>
    < li class="section">5< /li>
    < li class="section">6< /li>
< /ul>
< ul class="sortable" id="column3">
    < li class="header">Header< /li>
    < li class="section">7< /li>
    < li class="section">8< /li>
    < li class="section">9< /li>
< /ul>

Javascript

var colLength = 4;
$('#column1, #column2, #column3').sortable({
    connectWith: ".draftboard",
    items : ".section",
    update : balanceColumns
});
balanceColumns: function(event, ui){
    function balanceColumn1(){
        var col1 = $('#column1 li');
        var col2 = $('#column2 li');
        var col3 = $('#column3 li');
        if (col1.length > colLength){
            col1.last().insertAfter( col2[0] );
        }
        else if(col1.length < colLength){
            col2.parent().children(':nth-child(2)').appendTo(col1.parent());
        }
    }
    function balanceColumn2(){
        var col1 = $('#column1 li');
        var col2 = $('#column2 li');
        var col3 = $('#column3 li');
        if (col2.length > colLength){<br/>
            if (col1.length < colLength) {
                col2.parent().children(':nth-child(2)').appendTo(col1.parent());
            } else {
                col2.last().insertAfter( col3[0] );
            }
        }
        else if(col2.length < colLength){
            col3.parent().children(':nth-child(2)').appendTo(col2.parent());
        }
    }
    function balanceColumn3(){
        var col1 = $('#column1 li');
        var col2 = $('#column2 li');
        var col3 = $('#column3 li');
        if (col3.length > colLength) {
            col3.parent().children(':nth-child(2)').appendTo(col2.parent());
            balanceColumn2();
        }
    }
    balanceColumn1();
    balanceColumn2();
    balanceColumn3();
}

最佳答案

尝试这样的操作:http://jsfiddle.net/ETGyq/

我现在没时间了,但明天可以继续。

关于javascript - jQuery:固定长度、连接、可排序列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610494/

相关文章:

javascript - 在日期选择器中选择后禁用日期

javascript - 垂直对齐 : top different type of tag in LI Node

javascript - 在另一个页面上调用 javascript 函数/按钮单击事件

javascript - 在两个 div 之间用 jquery 画线

javascript - 如何在 meteor 项目中 Bootstrap 之前调用 jquery-ui 以防止冲突

javascript - 如何在关闭第一个 UI Datepicker 时打开第二个 UI Datepicker

javascript - 使用javascript在post请求中发送HTML内容

javascript - 使用jquery输入后查找具有特定类的span

javascript - 如何使用 javascript 创建动态 ID,然后链接到轮播上的帖子?

javascript - 将两个 Unix 时间戳编码为一个