2014-10-03 92 views
2

我正在使用tablesorter来排序一组值,其格式因0123'到6.39 million,37.3 million,5.3 million等不同而异。目前,插件排序简单地忽略了million,否则排序很好,但是因此您得到类似'530万,639万,3730万,710,231,在tablesorter中排序'human'数字

+0

如果tablesorter是一个特定的插件或库,您应该更加具体,并且可能使其成为文档的链接。此外,请提出问题。如果你不问问题,你就无法得到答案。 – 2014-10-03 02:08:56

+0

换句话说,tablesorter工作正确,数据混乱。 – 2014-10-03 02:38:49

+0

根据你所说的,它可能只是使用* parseFloat *。您首先需要一个将“人”号码转换为实际号码的功能(例如630万至6300000),然后您可以根据需要对其进行排序。 – RobG 2014-10-03 02:39:15

回答

0

您需要添加一个解析器来替换其名称值(demo):

// see big list here: http://www.unc.edu/~rowlett/units/large.html 
var numbers = { 
    'zero'  : 0, 
    'hundred'  : 100, 
    'thousand' : 1e3, 
    'million'  : 1e6, 
    'billion'  : 1e9, 
    'trillion' : 1e12, 
    'quadrillion' : 1e15, 
    'quintillion' : 1e18, 
    'sextillion' : 1e21, 
    'septillion' : 1e24, 
    'octillion' : 1e27, 
    'nonillion' : 1e30, 
    'decillion' : 1e33 
}; 

$.tablesorter.addParser({ 
    id: "namedNumbers", 
    is: function() { 
     return false; 
    }, 
    format: function (s, table) { 
     var v, 
      result = 1, 
      arry = (s || '').split(/[\-\s]+/), 
      len = arry.length; 
     while (len) { 
      v = $.tablesorter.formatFloat((arry[--len] || '').toLowerCase(), table); 
      if (numbers.hasOwnProperty(v)) { 
       result *= numbers[v]; 
      } else { 
       result *= parseFloat(v); 
      } 
     } 
     return result !== 1 ? result : s; 
    }, 
    type: "numeric" 
}); 

$(function() { 
    $('table').tablesorter({ 
     theme: 'blue', 
     headers : { 
      1 : { sorter : 'namedNumbers' } 
     } 
    }); 
});