Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery order by date in data attribute

Tags:

jquery

If i have this markup:

<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>

How could i use jQuery to order these P's by their data-date attribute?

Thanks

like image 401
benhowdle89 Avatar asked Aug 27 '11 00:08

benhowdle89


3 Answers

Demo

Super simple with an array sort:

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

Reverse order (in case I misunderstood you) is as easy as flipping the greater than symbol

$("p").sort(function(a,b){
    return new Date($(a).attr("data-date")) < new Date($(b).attr("data-date"));
}).each(function(){
    $("body").prepend(this);
})
like image 111
Joseph Marikle Avatar answered Nov 04 '22 08:11

Joseph Marikle


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();

Working demo: http://jsfiddle.net/AlienWebguy/JhgSw/

like image 27
AlienWebguy Avatar answered Nov 04 '22 08:11

AlienWebguy


The custom function suggested in Joseph's answer (the currently accepted solution) should return a numeric value, not a boolean. See This other question where this issue has already been raised showing that this function will not work in IE.

The "dates.compare(a,b)" function defined here looks like a better fit for use in jQuery's sort method.

like image 3
Industrial Zombie Avatar answered Nov 04 '22 08:11

Industrial Zombie