如果我有这个标记:
<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?
由于
答案 0 :(得分:25)
超级简单的数组排序:
$("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();
答案 2 :(得分:3)
Joseph的答案(当前接受的解决方案)中建议的自定义函数应返回一个数值,而不是布尔值。请参阅已发出此问题的This other question,表明此功能在IE中无效。
“dates.compare(a,b)”函数定义here看起来更适合在jQuery的排序方法中使用。