2010-12-23 65 views
0

這對我來說是一個挑戰...交換節點的生動節點

我在XML文檔中有一組節點。我需要根據某個節點值對它們進行排序。所以,如果我遍歷節點,然後節點值符合我的標準,我希望它走到最後。

問題是,當我交換時,由於節點位於活動集中,因此當迭代指針錯過一個條目時,因爲appendChild正在活動集上運行。

這是到目前爲止我的代碼,但正如我所說,它可能會錯過一個條目由於交換:

for (var i=1; i <= nElem; i++) 
{ 
    var node = getNode(dom,"//item[" + i + "]"); 
    var state = getNodeValue(dom,"//item[" + i + "]/state"); 
    if ((state != 'XX') && (i != nElem)) 
    { 
     node.parentNode.appendChild(node);    
    } 
} 

我真正想要的是,在國家「XX」的所有項目都在頂部。

有沒有人有一個聰明的想法呢? 感謝

回答

1

你可以使用的Array.sort(),並通過自定義排序程序:

  • var nodes = getNode(dom, "//item");讓你的項目
  • 陣列旁邊,從DOM刪除nodes
  • nodes.sort(sortfunction)其中排序功能是sortfunction(a,b)
  • 執行sortfunction以便它返回
    • -1,如果一個應當是下除B
    • 0,如果等於
    • 1,如果一個應當低於B
  • nodes的條目添加回DOM

予更高想想,這會做到這一點(只要我沒有錯過任何東西)。

+0

這也是我所做過的最好的。麻煩的是,我的節點不一定共享同一個父節點(雖然他們應該:這是我們供應商中的一個錯誤......沒有機會在短時間內改變它)。所以我不能只刪除它們,然後把它們放回去......但也許我會做它(編輯:通過使用相同的父母) – faboolous 2010-12-23 12:08:08