Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery排序仅在Chrome中工作_Jquery_Cross Browser - Fatal编程技术网

jQuery排序仅在Chrome中工作

jQuery排序仅在Chrome中工作,jquery,cross-browser,Jquery,Cross Browser,下面是我的代码,正如标题所解释的,这个脚本只在chrome中工作。 我已经测试了一些东西,IE在获取元素或它们的日期方面没有问题,问题在于排序函数。 有没有办法解决这个问题 谢谢 <script> jQuery(document).ready(function () { var elems = jQuery.makeArray(jQuery(".column.half")); elems.sort(

下面是我的代码,正如标题所解释的,这个脚本只在chrome中工作。 我已经测试了一些东西,IE在获取元素或它们的日期方面没有问题,问题在于排序函数。 有没有办法解决这个问题

谢谢

   <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来说明问题。您可以编辑您的帖子并添加指向它的链接。