Сортируйте список по весу, выбирая начало элемента и назначая ему собственный вес. - PullRequest
0 голосов
/ 03 июня 2019

Я хотел бы отсортировать список на основе заголовка / описания элемента.

В зависимости от первого слова , назначьте вес для последующего определения пользовательского заказа.

From:

  • Третий элемент в списке 4 200
  • Первый элемент в списке 3 200
  • Первый элемент в списке 3 200
  • четвертый элемент в списке 5 200
  • второй элемент в списке 2 200
  • второй элемент в списке 2 200

Кому:

  • Первый элемент в списке 3 200
  • Первый элемент в списке 3 200
  • Второй элемент в списке 2 200
  • Второй элемент в списке 2 200
  • Третий элемент в списке 4200
  • Четвертый элемент в списке 5 200

Любому заголовку, который мы не контролируем, будет присвоен заранее заданный вес (самый тяжелый), поэтомучто оно появляется в конце.

var list = $('.list');
var listItems = list.children('li').get();

$(listItems).each(function() {
  var $this = $(this);
  var description, focusDescription;
  var weight;
  
  description = $this.find('span.description a').text();
  focusDescription = description.split(' ')[0];

  switch (focusDescription) {
    case 'First':
      weight = 1;
      // code block logic
      break;
    case 'Second':
      weight = 2;
      // code block logic
      break;
    case 'Third':
      weight = 3;
      // code block logic
      break;
    case 'Fourth':
      weight = 4;
      // code block logic
      break;
    default:
      weight = 5;
      // code block logic
  }

});

listItems.sort(function(a, b) {
  // code block logic
})
$.each(listItems, function(idx, itm) {
  list.append(itm);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="list">
  <li class="list-element">
    <span class="description">
            <a href="#">Third element in list</a>
        </span>
    <span class="years">4</span>
    <span class="EC">200</span>
  </li>
  <li class="list-element">
    <span class="description">
            <a href="#">First element in list</a>
        </span>
    <span class="years">3</span>
    <span class="EC">200</span>
  </li>
  <li class="list-element">
    <span class="description">
            <a href="#">First element in list</a>
        </span>
    <span class="years">3</span>
    <span class="EC">200</span>
  </li>
  <li class="list-element">
    <span class="description">
            <a href="#">Fourth element in list</a>
        </span>
    <span class="years">5</span>
    <span class="EC">200</span>
  </li>
  <li class="list-element">
    <span class="description">
            <a href="#">Second element in list</a>
        </span>
    <span class="years">2</span>
    <span class="EC">200</span>
  </li>
  <li class="list-element">
    <span class="description">
            <a href="#">Second element in list</a>
        </span>
    <span class="years">2</span>
    <span class="EC">200</span>
  </li>
</ul>

1 Ответ

1 голос
/ 03 июня 2019

Вы можете отсортировать их с помощью определения объекта JS, который будет отдавать приоритет каждому слову.Таким образом, вы будете использовать этот приоритет в качестве ранга для вашей функции сортировки.Ваш код JS будет выглядеть так:

var rank = {
    First:0,
    Second:1,
    Third:2,
    Fourth:3,
}
var list = $('.list');
var listItems = list.children('li').get();

listItems.sort(function(a, b) {
  return rank[$(a).find('span.description a').text().split(' ')[0]] - rank[$(b).find('span.description a').text().split(' ')[0]]
})
$.each(listItems, function(idx, itm) {
  list.append(itm);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...