2012-10-12 53 views
-2

看到下面的代碼jQuery的排序是不是孩子標籤工作

source = $("<root><item desc='SQL'/><item desc='Microsoft'/><item desc='Action Script'><item desc='Java script'></root>") 

//WAY 1: This way is not working... 
source.children().sort(function(a, b) 
    { 
     var aText = $(a).attr("desc").toLowerCase(); 
     var bText = $(b).attr("desc").toLowerCase(); 

     if(aText == bText) 
      return 0; 

     return aText > bText ? 1 : -1; 
    }); 

alert(source[0].outerHTML); 

//WAY 2: This is working... 
var temp = source.children(); 

temp.sort(function(a, b) 
    { 
     var aText = $(a).attr("desc").toLowerCase(); 
     var bText = $(b).attr("desc").toLowerCase(); 

     if(aText == bText) 
      return 0; 

     return aText > bText ? 1 : -1; 
    }); 

source = $("<root/>"); 
source.append(temp); 

alert(source[0].outerHTML); 

方法1不工作,方法2是工作好。爲什麼我應該將孩子分配給另一個變量然後進行排序,將它們分配回原始變量?這是正確和有效的方式嗎?

你可以試試這個FIDDLE ....

+0

你們爲什麼不投票呢?這個問題不清楚還是沒有顯示任何研究工作? – user10

+0

在meta.so上看到你的qn http://meta.stackexchange.com/questions/158160/banned-to-ask-questions-in-stack-overflow - 我已經投了幾個帖子,但不是這個一:你需要說出你從第一種方式所期望的以及你所看到的,否則你就是在問太多的人試圖回答問題。你很幸運有你的答案。嘗試修復qn,我會加註它。解僱之前不應該很久。 –

回答

2

jQuery的集合中的兒童的順序無關,與孩子的XML節點的順序。在jQuery集合中,它們只是指向節點的指針。在第二個示例中,您將以新順序將它們添加到新根。

一個比喻:想象一下,你有一堆棒球運動員和他們的棒球卡。按照擊球順序排列棒球選手,然後按照與球員相同的順序排列他們的牌。

在你的第一個例子中,你只是分類棒球卡。球員本身不動。

在第二個示例中,您對卡片進行分類,然後按照與卡片分類相同的順序告訴玩家移動到新行。