【问题标题】:How to sort Unordered list with array index如何使用数组索引对无序列表进行排序
【发布时间】:2016-03-25 05:32:20
【问题描述】:

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

<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>

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

【问题讨论】:

    标签: jquery arrays sorting custom-data-attribute


    【解决方案1】:

    您可以使用 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>

    【讨论】:

    • 抱歉我的延迟回复它解决了我的问题。谢谢。
    • @AbdullahAhamed:很高兴帮助
    【解决方案2】:

    您可以使用.html().map()Attribute Equals Selector [name="value"]

    var values = Array("block2","block1","block4","block3");
    $("ul").html(values.map(function(val) {return $("[data-block="+val+"]")}))
    <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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-07
      • 1970-01-01
      • 2022-09-23
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-07
      • 1970-01-01
      相关资源
      最近更新 更多