jQuery可排序和数组度假

时间:2011-10-11 13:26:43

标签: javascript jquery jquery-ui-sortable

我有一个元素数组:markers和一个表,用于更新它的行以填充markers中存储的数据。 markers本身包含一个物体marker,其中包含纬度和经度。

当我使用markers数组中的详细信息填充表格时,我会根据i为每行提供一个ID,因为它会循环显示。

在这张桌子上我有jQuery可排序。我正在寻找一种方法来在每次排序行时重新排序markers数组,这样数组中项目的位置实际上就是它的排序顺序值。这样,我可以随时循环遍历数组并查看它是最新的顺序。

到目前为止,我已经生成了应该生成的表,并填充了markers数组。我甚至可以在将它们拖放到各处之后抢回行的顺序,此时我将它们存储在数组orders中并且只是提醒,这是有效的(即。0,1,2>拖到度假村> 2,0,1)。我希望有一种方法可以使用orders中的一组值来求助我原来的markers数组。

我认为这将涉及创建一个临时数组markersTemp,用于存储markers中保存的值但是按新顺序存在,除了我不确定如何循环以保存每个。有人做过类似的事吗?

2 个答案:

答案 0 :(得分:1)

function resort() {
    var order = []; // Get the order of the new rows
    $('#createMapDirections tbody tr').each(function(i, elem){
        order.push(markers[getId($("td", elem))]);
    });
    markers = order;
    updateAll();
}

旧程序:

  1. 创建新列表order
  2. 循环显示表格中的当前行 将ID存储在列表order
  3. 中的当前行
  4. 创建新列表markersTemp
  5. 循环列表order
    在列表i中的order位置获取ID 让markersTemp[i]成为markers中的元素(通过id引用旧位置)
  6. 重置markers
  7. markers设为markersTemp
  8. 优化

    1. 创建新列表order
    2. 循环遍历表格中的每一行 推送元素,由getId()
    3. order返回的索引引用
    4. markers覆盖order

答案 1 :(得分:0)

啊,为浪费每个人的时间而道歉!再过5分钟,我就解决了。对于有问题的其他人,这是我的整个函数在可排序的丢弃事件之后调用。

我不会说完全结束了。我很想知道这是否是最有效/最有效的方法。我知道有一个内置于javascript中的数组.sort()函数,可以使用吗?

function resort() {

    var order = new Array(); // Get the order of the new rows
    for (var i = 0; i < markers.length; i++) {
        order.push(getId($('#createMapDirections tbody tr').eq(i).find('td')));
    }

    var markersTemp = new Array();
    for (var i = 0; i < markers.length; i++) {
        var id = order[i];
        markersTemp[i] = markers[id];
    }

    markers.length = 0;
    markers = markersTemp.slice();

    updateAll();

}

修改

好的,所以我在页面上的表格如下:

<table><tbody>
    <tr id="row0"><td></td></tr>
    <tr id="row1"><td></td></tr>
    <tr id="row2"><td></td></tr>
</tbody></table>

getId()只是抓取TR的id并运行一点regex来获取该数字。当它们被使用时,顺序可能类似于:row2,row0,row1。我将此订单存储在orders(临时数组)中,并使用值markersTemp填充markersTemp(另一个临时数组),但是按新顺序填充。

function getId(button) {
    return $(button).parents('tr').attr('id').replace(new RegExp('\[A-Za-z]+'), '');
}