Подтвердить что ты не робот

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 своим атрибутом date-date?

Спасибо

4b9b3361

Ответ 1

Демо

Супер простой с сортировкой массива:

$("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);
})

Ответ 2

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/

Ответ 3

Пользовательская функция, предложенная в ответе Джозефа (принятое в настоящее время решение), должна возвращать числовое значение, а не логическое значение. См. Этот другой вопрос, где эта проблема уже поднята, показывая, что эта функция не будет работать в IE.

Функция datespare (a, b), определенная здесь, выглядит более подходящей для использования в методе сортировки jQuery.