2011-03-16 52 views
0

我试图像“200.32 M”或“800.80 B”的tablesorter自定义分析器

我使用的是当前的方法不工作了值进行排序。任何人都熟悉这个?

ts.addParser({ 
    id: 'mktcap', 
    is: function(s) { 
     return false; 
    }, 
    format: function(s) { 
     return s.replace(/M/,s+1000000).replace(/B/,s+1000000000); 
    }, 
    type: "numeric" 
}); 

回答

0

s.replace(/M/,s+1000000)看起来很奇怪。
试试这个,而不是为M(和同为B等)

var s = "200.32 M"; 
s = eval(s.replace(/ M/, " * 1000000")); 
// s = 200320000 

var s = "800.80 B"; 
s = eval(s.replace(/ B/, " * 1000000000")); 
// s = 800800000000 
+0

这工作就像一个魅力。谢谢!!! – Jack 2011-03-16 17:49:04

0

我敢肯定s.replace(/M/,s+1000000)不会做你期望的。最好的情况下,你最终会得到一个像“200.32 1000200.32”这样的字符串。我会检查M,将其剥离,将字符串转换为数字,然后添加/乘以适当的值。像这样...

var str = "200.32 M"; 
var tokenM = " M"; 
var num; 

if(str.indexOf(tokenM) == (str.length - tokenM.length)) { // Ends with " M"? 
    str = str.replace(new RegExp(tokenM), ""); 
    num = parseFloat(str) + 1000000; 
} 
0
var s= "200.32 M" ; 

var rx=/((\.\d+)|(\d+(\.\d+)?))\s*([MB])?/; 
var P= rx.exec(s), value, x, 
mult={M:1000000,B:1000000000,O:1}; 

if(P){ 
    value= P[1]; 
    x=P[5] || O; 
    value*=mult[x]; 
} 
alert(value) 

/*返回值:(数字) */