[英]Sorting list items by data attribute, alphabetically and then numerically
我想從AZ排序這個列表,然后是 0-9。
<ol class="columns">
<li data-char="y">y</li>
<li data-char="1">1</li>
<li data-char="a">a</li>
<li data-char="e">e</li>
<li data-char="c">c</li>
<li data-char="w">w</li>
<li data-char="0">0</li>
<li data-char="9">9</li>
<li data-char="g">g</li>
</ol>
$(".columns li").sort(sort_li).appendTo('.columns');
function sort_li(a, b){
return ($(b).data('char')) < ($(a).data('char')) ? 1 : -1;
}
看了類似的問題,這就是我想出的,但它只適用於數字或字母(不是兩者)。 https://jsfiddle.net/qLta1ky6/
數字的ASCII碼小於字母,所以在進行比較時只需添加權重,如下所示:
$(".columns li").sort(sort_li).appendTo('.columns');
function sort_li(a, b){
var va = $(a).data('char').toString().charCodeAt(0);
var vb = $(b).data('char').toString().charCodeAt(0);
if (va < 'a'.charCodeAt(0)) va += 100; // Add weight if it's a number
if (vb < 'a'.charCodeAt(0)) vb += 100; // Add weight if it's a number
return vb < va ? 1 : -1;
}
常規排序過程將首先映射數值。 我的想法是關於排序和處理數組后,以達到預期的結果。
var items = $('.columns li').get();
items.sort(function(a,b){
var keyA = $(a).attr("data-char");
var keyB = $(b).attr("data-char");
if (keyA < keyB) return -1;
if (keyA > keyB) return 1;
return 0;
});
//split the array to integers and alphanumerics
var nums = [], alphas = [];
$.each(items,function(i,v){
if(isNaN(parseFloat($(v).attr("data-char"))))
alphas.push(v)
else
nums.push(v)
});
items = alphas.concat(nums)
var ul = $('.columns');
$.each(items, function(i, li){
ul.append(li);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.