Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.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数据属性中的按日期排序_Jquery - Fatal编程技术网

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

jQuery数据属性中的按日期排序,jquery,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> 第1项 第1项 第1项 如何使用jQuery按数据日期属性对这些p进

如果我有这个标记:

<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>
第1项

第1项

第1项

如何使用jQuery按数据日期属性对这些p进行排序

谢谢

功能分类日期(a、b)
{
返回新日期(b).getTime()-新日期(a).getTime();
}
var日期=[];
var_old;
$('p')。每个(函数(){
_old=$(this.parent();
dates.push($(this.data('date'));
});
var sorted=dates.sort(排序日期);
var_new=$('').insertBefore(_old);
$。每个(已排序,函数(i,val){
$('p[data date=“”+val+“]')。附录(_new);
});
_旧的。删除();
工作演示:

带有数组排序的超级简单:

$("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);
})
$(“p”).sort(函数(a,b){
返回新日期($(a).attr(“数据日期”)<新日期($(b).attr(“数据日期”));
}).each(函数({
$(“正文”)。前置(本);
})

Joseph答案中建议的自定义函数(当前接受的解决方案)应返回数值,而不是布尔值。查看已在何处提出此问题,表明此功能在IE中不起作用


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

升序还是降序?哈哈,谢谢,@AlienWebguy:)但不管怎样,只要可行,您的解决方案就会更快:p该方法在IE9中似乎不起作用。不确定它是否为.sort,但列表在IE9中正好相反。@trobbins26我现在没有IE。你能试试这个更新版本吗?
$("p").sort(function(a,b){
    return new Date($(a).attr("data-date")) < new Date($(b).attr("data-date"));
}).each(function(){
    $("body").prepend(this);
})