2017-07-13 16 views
0

せずに私は私のリスト項目(人物名)をソートしたいアルファベット順、名前だけは敬称並べ替えではなくすべきである(氏夫人シュリ等。)ソート・リスト項目をアルファベット順敬称

から5回の固定礼拝があります。 DB。 (Shri Sh。Mrs. 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> 

は、結果は次のようになります:

  • 夫人アンドリュー・G
  • 氏Brwon
  • シュリ​​キャンディジョー
  • シュリ​​D.K.

    私はこのコードを持っていますミラー

  • 氏Eラム
  • 夫人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. Johnさんのようです。 Mrs. A.K. Lilly また、元のリストを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

    まず、すべての要素のテキストを配列にとり、ソート()関数を呼び出して配列をソートします。ソートコールバック関数では、姓に基づいて文字列を比較するカスタム比較関数を記述する必要があります(イニシャルテキストを除く)。その後、リストを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>

    関連する問題