2015-04-27 138 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