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?
Спасибо
Ответы
Ответ 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.