按字母顺序对列表项进行排序而不表示敬意

时间:2017-07-13 10:34:16

标签: jquery

我想按字母顺序对列表项(人名)进行排序,只有名字应该排序而不是称呼(Shri先生等等。)

DB有5个固定的称呼。 (Shri Sh。Mrs. Mrs.)

这可以通过jQuery实现吗?

我有这段代码:

<ul class='list1'>
   <li>Mr. Brwon</li>
   <li>Shri D.K. Miller</li>
   <li>Mrs. F. Jhon</li>
   <li>Shri Candy Joe</li>
   <li>Mr. E Ram</li>
   <li>Mrs. Andrew G</li>
</ul>

结果应为:

  • MRS。安德鲁G
  •        
  • 先生。 Brwon
  •        
  • Shri Candy Joe
  •        
  • Shri D.K.米勒
  •        
  • 先生。 E Ram
  •        
  • MRS。 F. Jhon
  • 3 个答案:

    答案 0 :(得分:0)

    &#13;
    &#13;
    var salutations = ["Shri", "Sh.", "Mr.", "Ms.", "Mrs."];
    
    var text = [];
    $(".list1").children().each(function(i, child){ 
      text.push($(child).text());
      text.sort(function(a, b){
      
          aWord = a;
          bWord = b;
        salutations.forEach(function(sal){
          aWord = aWord.replace(sal, "");
          bWord = bWord.replace(sal, "");
        });
      
        return (aWord < bWord ? -1 : 1);
       
      });
    });
    $(".list1").empty();
    text.forEach(function(name, i){
      $(".list1").append("<li>" + name + "</li>");
    });
    &#13;
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul class='list1'>
       <li>Mr. Brwon</li>
       <li>Shri D.K. Miller</li>
       <li>Mrs. F. Jhon</li>
       <li>Shri Candy Joe</li>
       <li>Mr. E Ram</li>
       <li>Mrs. Andrew G</li>
    </ul>
    &#13;
    &#13;
    &#13;

    答案 1 :(得分:0)

    $(function() {
        $('ul.list1').append( $('ul.list1 li').detach().sort(function(a, b) {
            var aname = $(a).text().split(' ').pop(),
                bname = $(b).text().split(' ').pop();
            return (aname < bname ? -1 : aname > bname ? 1 : 0);
        }) );
    });

    Jfiddle

    答案 2 :(得分:0)

    首先将所有列表元素文本放入一个数组中,然后调用sort()函数对数组进行排序。在排序回调函数中,您需要编写自定义比较函数,该函数将根据姓氏(首字母文本除外)比较字符串。然后将列表复制回html元素。

    试试这个:

    $(function() {
      $("#test-btn").on("click", function() {
        var list = $(".list1 li").map(function() {
          return $(this).text();
        });
    
        list.sort(function(a, b) {
          var a_name = a.substring(a.indexOf(" "), a.length);
          var b_name = b.substring(b.indexOf(" "), b.length);
          return a_name < b_name ? -1 : a_name > b_name ? 1 : 0;
        });
        $(".list1").empty();
        list.each(function(i, v) {
          $(".list1").append("<li>" + v + "</li>");
        });
    
    
      });
    });
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul class='list1'>
      <li>Mr. Brwon</li>
      <li>Shri D.K. Miller</li>
      <li>Mrs. F. Jhon</li>
      <li>Shri Candy Joe</li>
      <li>Mr. E Ram</li>
      <li>Mrs. Andrew G</li>
    </ul>
    
    <button id="test-btn">Sort List</button>