2011-03-16 53 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) 

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