我想按字母顺序对列表项(人名)进行排序,只有名字应该排序而不是称呼(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>
结果应为:
答案 0 :(得分:0)
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;
答案 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);
}) );
});
答案 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>