jquery - 如何使用数组索引对无序列表进行排序

标签 jquery arrays sorting custom-data-attribute

我正在尝试使用数据属性对列表进行重新排序,请参阅下面的代码。

<ul>
<li data-block="block1">Some Text...</li>
<li data-block="block2">Some Text...</li>
<li data-block="block3">Some Text...</li>
<li data-block="block4">Some Text...</li>
</ul>

在我的 jQuery 数组中,我有以下值

values = array("block2","block1","block4","block3");

所以我需要以数组索引的方式对列表进行排序/重新排序,如下所示。

<ul>
<li data-block="block2">Some Text...</li>
<li data-block="block1">Some Text...</li>
<li data-block="block4">Some Text...</li>
<li data-block="block3">Some Text...</li>
</ul>

请帮助我找到正确的解决方案。

最佳答案

您可以使用sort() 用于对元素进行排序

var values = ["block2", "block1", "block4", "block3"];

// get all li with data attribute
var $li = $('li[data-block]');
// sort them based on the index
$li.sort(function(a, b) {
  return values.indexOf($(a).data('block')) - values.indexOf($(b).data('block'));
})
// update the order by appending back to it's parent
.appendTo($li.parent());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
  <li data-block="block1">Some Text...1</li>
  <li data-block="block2">Some Text...2</li>
  <li data-block="block3">Some Text...3</li>
  <li data-block="block4">Some Text...4</li>
</ul>


ES6箭头方法

var values = ["block2", "block1", "block4", "block3"];

var $li = $('li[data-block]');
$li.sort((a, b) => values.indexOf($(a).data('block')) - values.indexOf($(b).data('block')))
  .appendTo($li.parent());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul>
  <li data-block="block1">Some Text...1</li>
  <li data-block="block2">Some Text...2</li>
  <li data-block="block3">Some Text...3</li>
  <li data-block="block4">Some Text...4</li>
</ul>

关于jquery - 如何使用数组索引对无序列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36214579/

相关文章:

javascript - 正则表达式不按给定条件过滤

php - jquery 发布文档准备就绪

python - 将文本文件转换为 numpy 数组

python - 我想对文档进行排名并将它们存储在 python 的列表中

c - 为什么快速排序代码会破坏稳定性?

javascript - 如何使用 javascript 模拟鼠标点击(在 Google map 中)?

c++ - 如何理解 "vector<int> avector (arr, arr + sizeof(arr)/sizeof(arr[0]) )"?

javascript - findOneAndUpdate mongodb 推送到现有数组

java - while 循环中的多个条件给出不同的结果

jquery - 单击 div 时在两个 div 之间翻转