0

我在li标签中有一个名称列表,我想通过单击外部链接/按钮/文本(任何内容)对它们进行排序。我搜索了这种类型的示例,但没有成功。

这有可能做到吗?我在 js 或 jquery 方面做得不够好,无法做出这样的事情。如果这是可能的,那将对我的项目非常有帮助。

jsfiddle 链接:JS 小提琴

您可以添加任何内容来完成该功能。

HTML

<p>Click me to Sort</p>


<ul>
    <li> Key Roles and Functions</li>
    <li> Leadership Clarity</li>
    <li> Margin</li>
    <li> Market Differentiation</li>
    <li> Market Maturity</li>
    <li> Maturity</li>
    <li> Mission</li>
    <li> Vision</li>
    <li> Objectives</li>
    <li> Operational Efficiency</li>
    <li> Outlet Characteristics</li>
    <li> Overall Measurements</li>
    <li> Overall Performance</li>
    <li> Overall Systems</li>
    <li> Pain Points</li>
    <li> Performance</li>
    <li> Positive Culture</li>
    <li> Price Optimization</li>
    <li> Promotion Strategy</li>
    <li> Sales Model</li>
    <li> Stickiness</li>
</ul>

CSS

    ul{
    list-style-type:none;
    width:200px;
    background:#bdbdbd;
}
4

1 回答 1

2

尝试这个:

HTML:

<!DOCTYPE html>
<html>

<head>
  <script data-require="jquery@1.9.1" data-semver="1.9.1" src="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
  <link rel="stylesheet" href="style.css" />
  <script src="script.js"></script>
</head>

<body>
  <p>Click me to Sort</p>
  <ul>
    <li>Mission</li>
    <li>Vision</li>
    <li>Objectives</li>
  </ul>
</body>

</html>

JavaScript:

$(function() {
  $('p').click(function() {

    var list = $('ul');
    var listitems = list.children('li').get();
    listitems.sort(function(e1, e2) {
      return $(e1).text().toUpperCase().localeCompare($(e2).text().toUpperCase());
    })

    $.each(listitems, function(idx, itm) {
      list.append(itm);
    });

  });
});

CSS:

ul {
  list-style-type: none;
  width: 200px;
  background: #bdbdbd;
}

Plunker 示例

更新:(评论的答案)要排序和取消排序,您应该修改 JavaScript:

$(function() {
  var noSortedTxts = [];
  var sortedTxts = [];
  var sort = true;

  $('p').click(function() {

    var list = $('ul');
    if (noSortedTxts.length === 0) {
      var listitems = list.children('li').get();

      $.each(listitems, function(idx, itm) {
        noSortedTxts.push($(itm).text());
      });

      sortedTxts = noSortedTxts.slice(0);
      sortedTxts.sort(function(t1, t2) {
        return t1.toUpperCase().localeCompare(t2.toUpperCase());
      });
    }

    if (sort) {
      list.empty();
      $.each(sortedTxts, function(idx, txt) {
        list.append('<li>' + txt + '</li>');
      });
      sort = false;
    } else {
      list.empty();
      $.each(noSortedTxts, function(idx, txt) {
        list.append('<li>' + txt + '</li>');
      });
      sort = true;
    }

  });
});

Plunker 示例

于 2013-11-06T23:04:30.570 回答