JS:如何根据新订单/“列表”更新列表项位置?

时间:2014-01-24 15:18:58

标签: javascript html list sorting jquery-ui-sortable

我有一个包含项目的列表,并希望根据更新顺序中带有ID的“数组”(它被证明是一个对象,而不是数组)来更新项目的顺序。

这里是“new_order”:

$.post('/fetch/get_list', function(new_order)
{
     // How should I handle new_order here?
}

如何将当前列表顺序更改为“new_order”?

一个想法是检索整个HTML列表,并使用php创建所有HTML列表。但在这种情况下我不能这样做。必须保留当前列表所包含的HTML。

所以,我只想更新当前打印列表中项目的顺序。

希望你理解我的意思。 :)

1 个答案:

答案 0 :(得分:3)

这样的事情应该有效。 JsFiddle

var reorder = function (new_order) {

    // the list we're reordering
    var $list = $("#the-list");

    // ordered li elements will be placed here
    var ordered = [];

    // detach the li elements from the list
    var $items = $list.find("li").detach();

    // sort them using the order array
    $items.each(function (i, item) {
        var id = parseInt($(item).data("id"));
        var pos = new_order.indexOf(id);
        ordered[pos] = item;
    });

    // append the ordered li elements to the list
    $(ordered).appendTo($list);
};

注意:这假设列表中的每个linew_order数组中都有相应的ID。