Порядок сортировки номеров по Javascript

1

У меня есть следующие элементы класса элемента 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]);
  • 1
    Вы HTML не работает. Сказав это, изменение .attr('data-order') на .data('order') должно (почти) добиться цели.
Теги:

3 ответа

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>
  • 0
    сортировка выглядит работой. но ItemPos - это только сортировка чисел. Это не несет весь блок. Я хочу иметь целый блок, чтобы разобраться. Как я могу иметь целый блок? <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>
0

Наряду с исправить это будет быстрее

var d = $('#main .item').sort(function (a, b) { 
  return $(a).data("order") - $(b).data("order"); 
  });

  console.log(d);
  • 2
    Вам не нужен parseInt() . jQuery попытается преобразовать значения автоматически: «Каждая попытка преобразовать строку в значение JavaScript делается (это включает логические значения, числа, объекты, массивы и нуль)».
0

попробуйте изменить.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>
  • 0
    Связано ли это со сравнением обратной строки функции сортировки? Если да, не могли бы вы объяснить причины?
  • 0
    Как вы будете определять порядок только с true и false когда есть три условия: a > b , a == b и a < b ? Array.prototype.sort() , Array.prototype.sort()
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню