jQuery在数据属性中按日期排序

时间:2011-08-27 00:19:19

标签: jquery

如果我有这个标记:

<p data-date="Fri, 26 Aug 2011 20:58:39 GMT">item 1</p>
<p data-date="Fri, 24 Aug 2011 20:58:39 GMT">item 1</p>
<p data-date="Fri, 25 Aug 2011 20:58:39 GMT">item 1</p>

我如何使用jQuery按照数据日期属性来命令这些P?

由于

3 个答案:

答案 0 :(得分:25)

Demo

超级简单的数组排序:

$("p").sort(function(a,b){
    return new Date($(a).attr("data-date")) > new Date($(b).attr("data-date"));
}).each(function(){
    $("body").prepend(this);
})

反向顺序(如果我误解了你)就像翻转大于符号一样容易

$("p").sort(function(a,b){
    return new Date($(a).attr("data-date")) < new Date($(b).attr("data-date"));
}).each(function(){
    $("body").prepend(this);
})

答案 1 :(得分:3)

function sortDates(a, b)
{
    return new Date(b).getTime() - new Date(a).getTime();
}

var dates = [];
var _old;

$('p').each(function(){
    _old = $(this).parent();
    dates.push($(this).data('date'));
});

var sorted = dates.sort(sortDates);
var _new = $('<div/>').insertBefore(_old);

$.each(sorted,function(i,val){
    $('p[data-date="' + val + '"]').appendTo(_new);
});

_old.remove();

工作演示:http://jsfiddle.net/AlienWebguy/JhgSw/

答案 2 :(得分:3)

Joseph的答案(当前接受的解决方案)中建议的自定义函数应返回一个数值,而不是布尔值。请参阅已发出此问题的This other question,表明此功能在IE中无效。

“dates.compare(a,b)”函数定义here看起来更适合在jQuery的排序方法中使用。