2015-04-27 139 views
1

我在這個工作了幾天。我有一個動態創建表中的行的腳本。最終的輸出是這樣的:使用.sort在IE中不工作(IE 9)

<table id="event-list"> 
    <tr id="event0" value="04/04/2000"> 
     <td>My Third Event</td> 
     <td>Apr 4</td> 
     <td>Omaha, NE</td> 
     <td></td> 
    </tr> 
    <tr id="event4" value="04/24/2000"> 
     <td>USA Triathlon National Championships Collegiate Club</td> 
     <td>Apr 24</td><td>Clemson, SC</td> 
     <td></td> 
    </tr> 
    <tr id="event2" value="07/17/2000"> 
     <td>My Second Event</td><td>Jul 17</td> 
     <td>Omaha, NE</td> 
     <td></td> 
    </tr> 
    <tr id="event3" value="08/17/2000"> 
     <td>My Second Event</td> 
     <td>Aug 17</td> 
     <td>Ames, IA</td> 
     <td></td> 
    </tr> 
    <tr id="event1" value="10/26/2000"> 
     <td>ZTA 5K For Breast Cancer Awareness</td> 
     <td>Oct 26</td> 
     <td>Omaha, NE</td> 
     <td></td> 
    </tr> 
</table> 

林下面的腳本來按日期每一行進行排序:

$('#event-list tr').sort(function(a,b) { 
     return new Date($(a).attr('value')) < new Date($(b).attr('value')); 

}).each(function(){ 
     $('#event-list').prepend(this); 

}); 

它可以在Chrome和Firefox罰款,但在IE瀏覽器 - 名單只是倒車以相反的順序。

任何想法的原因或解決?提前致謝。

回答

3

您的排序功能不正確。一個排序函數不能只返回一個布爾值來判斷一個元素是否大於另一個元素。它必須處理所有三種情況:小於,大於和平等。

  • 如果< B,返回負值
  • 如果A> B,返回正值
  • 如果== B,返回零

可以很容易地改變你的排序功能來完成這一點。相反,這兩個值與<運營商比較,簡單相減:

return new Date($(a).attr('value')) - new Date($(b).attr('value')); 

如果讓你從你想要的相反順序,扭轉這種局面:

return new Date($(b).attr('value')) - new Date($(a).attr('value')); 
+0

有道理!遇到一些連接問題時,就像我正在閱讀您的最後一條評論。我會盡快給這個鏡頭,看看它是如何發展的。謝謝! – trobbins26

+0

確認。這工作。謝謝你的幫助! – trobbins26