0

以下代码按如下方式对列表进行排序:1. item, 10. item, 100. item... 我要添加或更改什么以按数字顺序排列列表(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;
      }
    }
4

4 回答 4

0

你只需要改变:

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

至:

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

这会将 转换String为数字并按照您的意愿进行排序。

于 2012-06-26T14:38:47.603 回答
0

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

于 2012-06-26T14:35:54.303 回答
0

代替

vals.sort() 

你应该做:

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

这将对“数字”进行排序。

于 2012-06-26T14:41:54.270 回答
0

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

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

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

于 2012-06-26T15:26:10.487 回答