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
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);
})
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/
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With