jQuery排序仅在Chrome中工作
下面是我的代码,正如标题所解释的,这个脚本只在chrome中工作。 我已经测试了一些东西,IE在获取元素或它们的日期方面没有问题,问题在于排序函数。 有没有办法解决这个问题 谢谢jQuery排序仅在Chrome中工作,jquery,cross-browser,Jquery,Cross Browser,下面是我的代码,正如标题所解释的,这个脚本只在chrome中工作。 我已经测试了一些东西,IE在获取元素或它们的日期方面没有问题,问题在于排序函数。 有没有办法解决这个问题 谢谢 <script> jQuery(document).ready(function () { var elems = jQuery.makeArray(jQuery(".column.half")); elems.sort(
<script>
jQuery(document).ready(function () {
var elems = jQuery.makeArray(jQuery(".column.half"));
elems.sort(function(vara, varb) {
return new Date( jQuery(vara).attr('datetime')) > new Date( jQuery(varb).attr('datetime'));
});
jQuery(".row.listing").html(elems);
});
</script>
jQuery(文档).ready(函数(){
var elems=jQuery.makeArray(jQuery(“.column.half”);
元素排序(函数(vara,varb){
返回新日期(jQuery(vara.attr('datetime'))>newdate(jQuery(varb.attr('datetime'));
});
jQuery(“.row.listing”).html(elems);
});
以下是JSFIDLE,它也仅适用于chrome:
我还不能回答,因为我是一个新手,但我现在将它粘贴在这里,以节省人们的时间:
算出了!!!!!!!!!!哇,那太令人沮丧了,希望我能拯救一些人几个小时的生命和一些白发
问题是排序函数返回“true”或“false”。但是对于sort函数,这里是return所期望的:
-1意味着第一个更少
0表示两者相等
1表示第一个更大
显然,Chrome是唯一转换布尔值的浏览器。因此,我所要做的就是将返回值从布尔值true/false更改为1/0传递到Array.prototype.sort()的比较函数应该(必须)返回三个可能值中的一个,即-1(ab) Chrome可能会使用不同的算法来执行排序,这段特定代码将以某种方式工作 因此,您的比较函数应该是:
var date_a = vara.getAttribute('datetime'),
date_b = varb.getAttribute('datetime');
if (date_a != date_b) {
return date_a < date_b ? -1 : 1;
}
return 0;
var date\u a=vara.getAttribute('datetime'),
date_b=varb.getAttribute('datetime');
如果(日期a!=日期b){
返回日期a<日期b?-1:1;
}
返回0;
我在这里使用基本字符串比较,因为日期/时间格式可以进行比较(直到达到Y10k)请制作一个JSFIDLE来说明问题。您可以编辑您的帖子并添加指向它的链接。