javascript - 按重量对列表进行排序,选取项目的开头并为其分配自定义权重

标签 javascript jquery html sorting dom

我想根据元素的标题/描述对列表进行排序。

根据第一个单词,分配权重以便稍后定义自定义顺序。

来自:

  • 列表 4200 中的第三个元素
  • 列表 3200 中的第一个元素
  • 列表 3200 中的第一个元素
  • 列表 5200 中的第四个元素
  • 列表 2200 中的第二个元素
  • 列表 2200 中的第二个元素

致:

  • 列表 3200 中的第一个元素
  • 列表 3200 中的第一个元素
  • 列表 2200 中的第二个元素
  • 列表 2200 中的第二个元素
  • 列表 4200 中的第三个元素
  • 列表 5200 中的第四个元素

Any title that we are not controlling, will be assigned a predetermined weight (the heaviest) so that it appears at the end.

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>

最佳答案

您可以通过定义一个 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);
});

关于javascript - 按重量对列表进行排序,选取项目的开头并为其分配自定义权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56425730/

相关文章:

javascript - 您好,非 ie 浏览器中的字幕延迟

html - CSS 在每第 n 个 child 后清除

javascript - 如何仅显示elfinder(jquery文件管理器插件)中的文件夹列表

javascript - YouTube 模态静态

javascript - 合并两个数组,在 redux 中使用不可变模式避免重复

javascript - 添加和删​​除具有关联数字输入值的文本字段

javascript - 计算for循环中的输入文件

javascript - 从输入文件中获取选定的文件

javascript - 从 MySQL 导出到 PHP 中的对象数组,然后导出到 JavaScript

javascript - 是否可以将 html(例如 bootstrap 图标)放在 DevExpress dxDataGrid 列标题中?