按数字顺序排列列表

Numerically order list

本文关键字:列表 排列 顺序 数字      更新时间:2023-09-26

以下代码按如下方式对列表进行排序:1. 项, 10. 项, 100. 项...我添加或更改什么以按数字(1,2,3...)对列表进行排序?

  function sortUnorderedList(ul, sortDescending) {
      if(typeof ul == "string")
        ul = document.getElementById(ul);
      var lis = ul.getElementsByTagName("LI");
      var vals = [];
      for(var i = 0, l = lis.length; i < l; i++)
        vals.push(lis[i].innerHTML);
      vals.sort();
      if(sortDescending)
        vals.reverse();
      for(var i = 0, l = lis.length; i < l; i++)
        lis[i].innerHTML = vals[i];
    }
    window.onload = function() {
      var desc = false;
      document.getElementById("test").onclick = function() {
        sortUnorderedList("lister", desc);
        sortUnorderedList("bin", desc);
        desc = !desc;
        return false;
      }
    }

集合的元素存储为字符串,因此它们按字母顺序排序。我相信如果您使用 parseInt 函数将元素添加为整数,您的排序应该按预期工作。

你只需要改变:

vals.push(lis[i].innerHTML);

自:

vals.push(+lis[i].innerHTML);

这会将String转换为数字,并使排序按您的意愿工作。

而不是

vals.sort() 

你应该做:

vals.sort(function(a,b){return a-b});

这将对"数字"进行排序。

实际上,将字符串和整数等字符串排序为整数是一种很好的做法。

因此,我建议您为可以在项目中应用的数据类型编写各种排序函数,并使用正则表达式确定要使用的函数。

还有一个很棒的jQuery插件,可以很容易地扩展:http://tablesorter.com/docs/