【问题标题】:Sorting an HTML list ascending and descending, with jQuery使用 jQuery 对 HTML 列表进行升序和降序排序
【发布时间】:2017-01-31 05:05:03
【问题描述】:

我有一个“编号”的名字列表。我想通过单击按钮按字母顺序对其进行排序,但只有在从下拉列表(选择)中选择排序标准后

问题是,如果我对项目进行升序然后降序排序,降序排序的项目将放置在升序排序的项目之后。列表越来越大。

$(document).ready(function(){
  var sortItems = function() {
    var sortedNames = [];
    var sortedItms = [];
    var rawNames  = $('.list').find('li');
    for (var i = 0; i < rawNames.length; i++) {
      var names = $(rawNames[i]).text();
      sortedNames.push(names);
    }

    $('#choose_order').on('change', function(){
      var currVal = $(this).find("option:selected").val();
      console.log(currVal);
      if (currVal != 'default') {
        $('#sortbtn').removeClass("disabled");
        if (currVal == 'asc') {
          sortedNames.sort();
        } else {
          sortedNames.sort();
          sortedNames.reverse();
        }
      } else {
        $('#sortbtn').addClass("disabled");
      }
    });

    var setItems = function () {
     sortedItms = [];
      for (var j = 0; j < sortedNames.length; j++) {
        var sortedItm = '<li>' + sortedNames[j] + '</li>';
        sortedItms.push(sortedItm);
      }
      sortedItms.join('');
      $('.list').html(sortedItms);
    }

    $('#sortbtn').on('click', setItems);
  }
  $(window).on('load', sortItems);

});
<link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div class="pannel">
  <select name="choose_order" id="choose_order">
    <option value="default" selected="selected">Choose sorting order</option>
    <option value="asc">Ascending</option>
    <option value="desc">Descending</option>
  </select>
  <div class="buttons_container">
    <a class="btn btn-success disabled" id="sortbtn">Sort</a>
  </div>
  <ol class="list">
    <li>Cosmin</li>
    <li>Alina</li>
    <li>Diana</li>
    <li>Elena</li>
    <li>Bogdan</li>
  </ol>
</div>

我做错了什么?

谢谢!

【问题讨论】:

  • 您正在使用.push 将项目添加到您的sortedItms 数组中,但我没有看到您在任何地方清除数组。您应该用每个排序替换此数组中的项目,而不是添加到它。

标签: javascript jquery list sorting


【解决方案1】:

您必须清除您的sortedItms

var setItems = function () {
     sortedItms = [];
      for (var j = 0; j < sortedNames.length; j++) {
        var sortedItm = '<li>' + sortedNames[j] + '</li>';
        sortedItms.push(sortedItm);
      }
      sortedItms.join('');
      $('.list').html(sortedItms);
    }

【讨论】:

  • 完美运行!谢谢! :)
猜你喜欢
  • 2021-12-24
  • 2016-10-18
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 2020-06-06
  • 2016-11-05
  • 2020-11-09
相关资源
最近更新 更多