2012-08-13 265 views
1

这里我使用javascript.But它排序字符串alone.What我需要的是从字符串分割的数值和排序字母数字字符串值的数值values.Here是我的代码如何对字母数字字符串值进行排序?

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]; 
    } 

任何建议?

编辑:当前结果

PPG 101 
PPG 102 
PPG 57 
PPG 58 
PPG 99 

预期结果:

PPG 57 
PPG 58 
PPG 99 
PPG 101 
PPG 102 
+0

请提供示例HTML,以便我们可以看到您要完成的工作。您是否尝试对LI标签列表中的数字进行排序,同时忽略HTML中的所有非数字? – jfriend00 2012-08-13 08:53:34

+0

@ jfriend00:没有第一我需要排序后的字母排序数字 – bala3569 2012-08-13 08:58:03

+0

http://stackoverflow.com/questions/4340227/sort-mixed-alpha-numeric-array – ArtBIT 2012-08-13 09:04:11

回答

2

要执行数字排序,则必须调用sort方法时传递一个函数作为参数。

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

更多细节

+0

我没有看到数字前的字符串,使用更完整的Mitch Satchwell功能波纹管(这是相同的想法)。 – 2012-08-13 09:14:19

1

http://www.javascriptkit.com/javatutors/arraysort.shtml如果你想通过字符串第一个排序,然后按空格之后的数值,你需要指定自己的功能,在传递给sort函数,如下所示:

arr.sort(function(a,b) { 
    a = a.split(' '); 
    b = b.split(' '); 
    if (a[0] == b[0]) { 
    return parseInt(a[1]) - parseInt(b[1]); 
    } 
    return a[0] > b[0]; 
}); 

上面的示例首先按字符串排序,然后按字符串(数字)排序。上面的代码适用于假定被排序的值将始终采用上述格式,并且缺少对输入的任何检查。

+0

第一次点击它工作正常......但第二次点击显示错误Microsoft JScript运行时错误:'0'为空或不是对象 – bala3569 2012-08-13 10:23:17

+0

你能提供一个jsfiddle吗? – 2012-08-13 11:22:28

相关问题