У меня есть следующие элементы класса элемента HTML для сортировки для Numerical Descending order.
<div id="main">
<div class="item" data-order="2">
<div class="stamp">13/10/2018 11:45 am EDT</div>
</div>
<div class="item" data-order="3">
<div class="stamp">13/10/2018 10:45 am EDT</div>
</div>
<div class="item" data-order="1">
<div class="stamp">12/10/2018 8:45 pm EDT</div>
</div>
<div class="item" data-order="0">
<div class="stamp">13/10/2018 10:43 am EDT</div>
</div>
По некоторым причинам следующий код не работает для меня. Что мне не хватает при сортировке?
var d = $('#main').sort(function (a, b) {
return $(a).find(".item").attr("data-order") < $(b).find(".item").attr("data-order");
});
console.log(d[0]);
Сделайте это так:
<script type="text/javascript">
var items = document.querySelectorAll('.item');
var itemPos = [];
for(var i in items){
if(items.length > i){
itemPos.push(items[i].getAttribute('data-order'));
}
}
itemPos = itemPos.sort(function(a, b){return b - a});
<script>
<div class="item" data-order="0"> <div class="stamp">13/10/2018 11:50 am EDT</div> </div> <div class="item" data-order="1"> <div class="stamp">13/10/2018 11:45 am EDT</div> </div>
var d = $('#main .item').sort(function (a, b) {
return $(a).data("order") - $(b).data("order");
});
console.log(d);
parseInt()
. jQuery попытается преобразовать значения автоматически: «Каждая попытка преобразовать строку в значение JavaScript делается (это включает логические значения, числа, объекты, массивы и нуль)».
попробуйте изменить.attr("порядок данных") на.data('order'), как показано ниже
var d = $('#main').children("div").sort(function (a, b) {
var difference = $(a).data('order') - $(b).data('order');
if(difference < 0)
return -1;
if(difference > 0)
return 1;
return 0;
});
console.log(d);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="main">
<div class="item" data-order="2">
<div class="stamp">13/10/2018 11:45 am EDT</div>
</div>
<div class="item" data-order="3">
<div class="stamp">13/10/2018 10:45 am EDT</div>
</div>
<div class="item" data-order="1">
<div class="stamp">12/10/2018 8:45 pm EDT</div>
</div>
<div class="item" data-order="0">
<div class="stamp">13/10/2018 10:43 am EDT</div>
</div>
true
и false
когда есть три условия: a > b
, a == b
и a < b
? Array.prototype.sort()
, Array.prototype.sort()
.attr('data-order')
на.data('order')
должно (почти) добиться цели.