使用JQuery Sortable toArray with connectWith;如何获取所有项目的ID?

时间:2011-06-01 20:56:19

标签: jquery jquery-ui jquery-ui-sortable

如果 n 列出了可在列表中排序的 m 项目,我如何从上到下获取所有列表中所有项目的ID的整体列表(包括排序参与者和非参与者)?

我的项目列表如下所示:

Category 1
- (id=a) Item 1A
- (id=b) Item 1B
Category 2
- (id=c) Item 2A
- (id=d) Item 2B
Category 3
- (id=e) Item 3A
- (id=f) Item 3B

这些项目在各个类别中均为Sortable,并通过connectWith连接(请参阅下面的代码)。例如,项目2B可以拖放到类别1中。

我可以使用updatetoArray来获取要拖动的部分的ID以及要拖动的部分,但是有一种干净的方法来访问所有这些吗?我需要以某种方式手动构建它吗? 如何以当前排序顺序获取所有 ID列表?

例如,如果我将项目2B拖到类别1中的第一个位置,我可以得到两个update的两个数组的数组列表,第一个包含“d”(我移动的列表)和第二个包含“c,a,b”(我移动到的列表)。如何获得包含“c,a,b,d,e,f”的列表?这是在点击按钮时发生的,所以我不限于update,如果有更好的机制来获取信息。

到目前为止我所拥有的Here's a JFIDDLE demo

2 个答案:

答案 0 :(得分:2)

似乎没有本机功能可以执行此操作,因此我created a demo会迭代所有.sortable元素以创建一个阵列,并使用Firebug登录Chrome或Firefox中的控制台。我还将update更改为receive,因此它只触发一次(见jQueryUI sortable documentation)。

答案 1 :(得分:2)

另一种方法是循环遍历所有可排序的子元素并记录它们的顺序。

$('.sortable').sortable({ 
    items: '> tr.child',
    connectWith: $('tbody'),
    receive: function(event, ui) {
        var myOrder = new Array();
        $(".sortable tr.child").each(function() {
            myOrder.push($(this).attr("id"));
        });
        console.log(myOrder.toString());  
    }
});

这具有允许随时添加和删除可排序容器的额外好处 - 该脚本无论如何都可以使用。