2017-07-13 65 views
0

我想我的列表项(人名)按字母顺序排序,只是名字应该进行排序而不是称呼(先生,太太至尊等)排序列表中的项目按字母顺序排列,而不称呼

有5个固定的称呼来自哪里D B。 (先生女士先生女士)

这是可以通过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> 

结果应该是:

  • 安德鲁摹夫人Brwon
  • 至尊糖果乔
  • 至尊D.K.
  • 先生米勒
  • 鄂先生拉姆
  • F.夫人JHON
  • +1

    你有所有可能的问候名单?或者我们可以假设,称呼始终是第一个字? –

    +0

    是的..会有3-4个称呼。 –

    +2

    这些名字是来自服务器吗?如果是这样,我会在那里进行排序 –

    回答

    1

    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>"); 
     
    });
    <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>

    +0

    目前我正在排序并输出到控制台。你需要输出来使用HTML中的原始列表吗? –

    +0

    嗨,约书亚,我的一些名字是,先生B.约翰 夫人A.K.莉莉 另外我需要输出来诉诸HTML中的原始列表。 –

    +0

    这应该现在工作 –

    1

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

    +1

    工作!谢谢。 –

    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>