2011-10-11 40 views
1

我有一個元素數組:markers和一個表,它更新它的行以填充存儲在markers內的數據。 markers本身有一個對象其中有經度和緯度。jQuery可排序和陣列度假村

當我使用markers數組中的細節填充表格時,我給每行添加一個基於i的ID,因爲它循環播放。

在這個表上我有jQuery可排序。我正在尋找一種方法來重新排序我的markers數組每次行排序,以便該數組中的項目的位置實際上是它的排序順序值。這樣,我可以在任何時候簡單地遍歷數組,並看到它是最新的訂單。

到目前爲止,我已經按照應該生成的表格和markers數組填充。我甚至能夠在排序後回收行的順序,目前我將它們存儲在一個數組orders中,並且只是提醒,這個工作(即0,1,2>拖動到度假> 2,0, 1)。我希望現在可以使用orders中的一組值來使用我的原始markers數組。

我認爲這將涉及到創建一個臨時數組markersTemp用於存儲markers保存的值,但以新的順序,除了我不知道如何循環保存每個。任何人做過類似的事情

+0

顯示你的代碼,所以我可以實現它。 –

+0

感謝您的關注,我確實已經解決了,但也許您可以在下面的答案中回答我的問題? – Chris

回答

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. 循環。
    商店在當前排在列表order
  3. 的ID通過列表order
    創建一個新的列表markersTemp
  4. 循環獲取在i位置ID列表order
    markersTemp[i]markers元素(在老位置通過id簡稱)
  5. 復位markers
  6. 設置markersmarkersTemp

優化:

  1. 創建一個新的列表order
  2. 循環遍歷每個r在表中。
    推元件,由索引稱爲從getId()order
  3. 通過order作爲返回覆蓋markers
+0

作品一種享受!至於'id'的位置,它實際上在表格的行中,但我使用'getId()'傳遞其中一個表格單元內的其他位置。 'getId()'本身看起來像這樣((由於格式化而添加到我的答案中)) – Chris

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,並運行一個小的正則表達式只得到號碼。當它們被使用時,這個順序可能是這樣的:row2,row0,row1。我將此訂單存儲在orders(臨時數組)中,並以markersTemp的數值填充markersTemp(另一個臨時數組),但是按新訂單。

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

定義'getId'。是的,有一個'Array.sort'函數。我已經創建了幾種排序算法。只要發佈相關的代碼,我會根據你的情況調整其中的一個。 –

+0

好的,謝謝,看我的編輯答案 – Chris

+0

我已經發布了一個優化的腳本。您的代碼示例不等於您的代碼:您的示例提到'id'要附加到一行,而代碼聲稱ID是單元的屬性。 –