javascript – 按数据属性按字母顺序排序列表项,然后按数字排序

我想要从A-Z然后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;   
}

Updated JSFiddle here

转载注明原文:javascript – 按数据属性按字母顺序排序列表项,然后按数字排序 - 代码日志