按日期内容订购div

时间:2015-12-11 11:23:28

标签: jquery html sorting

我有以下函数用于按日期排序我的div数组 -

function sortDates(arrayContent) {
    arrayContent.sort(function (a, b) {

        var arrDate = $(a).find("#postedDate").text().replace(" posted at: ", "");
        var brrDate = $(b).find("#postedDate").text().replace(" posted at: ", "");

        var aTime = arrDate.split(' ')[1];
        var aDate = arrDate.split(' ')[0];
        a = new Date(aDate.split('/')[2], aDate.split('/')[1] - 1, aDate.split('/')[0], aTime.split(':')[0], aTime.split(':')[1]);

        var bTime = brrDate.split(' ')[1];
        var bDate = brrDate.split(' ')[0];
        b = new Date(bDate.split('/')[2], bDate.split('/')[1] - 1, bDate.split('/')[0], bTime.split(':')[0], bTime.split(':')[1]);

        return a > b ? -1 : a < b ? 1 : 0;
    });
}

arrayContent =

arrayContent[0] = "<div class="mHr" id="mFID"> 
   <div id="postedDate"> posted at: <b>11/12/2015 11:12:16</b> </div>
</div>" // etc etc

这个当前函数确实有效,但是我希望对数百个div进行排序,使用这种方法的运行时将永远存在。

目前的限制是我在填充arrayContent之前无法进行日期转换,并且添加到arrayContent的每个值总是一串HTML,因此我必须找到postedDate和然后相应地拆分它以创建一个有效的日期变量。

这是我提出的最佳效果,但是如前所述,它非常慢。

我还发现this问题与我的情况大致相同,但没有更快的解决方案。

1 个答案:

答案 0 :(得分:1)

如果您想使用数百个作为服务器任务的元素。但仅用于测试目的,尝试这个小排序函数,它避免使用jQuery,避免使用split方法,避免使用Date类并使用正则表达式来比较两个数字。我尝试了一百个项目数组,需要29.570ms,原始功能需要996.119ms。

var reg = /^.*?(\d{2})\/(\d{2})\/(\d{4})\s(\d{2})\:(\d{2})\:(\d{2}).*$/;

function sortDates(a, b){   

  var numberA = Number( a.replace(reg, "$3$2$1$4$5$6") );
  var numberB = Number( b.replace(reg, "$3$2$1$4$5$6") );

  return numberA - numberB;

}

arrayContent.sort(sortDates);