2012-01-27 54 views
22

jQuery 1.7.1 & tablesorter插件 - 我有一個貨幣列與千位分隔符和值像$ 52.00 $ 26.70 $ 100.00 $ 50.00 $ 1,002.00 $ 1,102.00。當我嘗試以按以下方式得到排序,jQuery tablesorter - 沒有排序格式化的貨幣值列

$1,002.00 
    $1,102.00 
    $26.70 
    $50.00 
    $52.00 
    $100.00 

需要一個價值一樣,這裏提到

$26.70 
    $50.00 
    $52.00 
    $100.00 
    $1,002.00 
    $1,102.00 

試了很多解決方案,但沒有成功。

+0

你爲什麼不刪除逗號,然後回加的? – 2012-01-27 00:21:36

+0

@JosephSilber不知道該怎麼做。謝謝。 – SyAu 2012-01-27 00:28:06

+0

看看這個。這是歐盟模式,但你可以弄明白:http://stackoverflow.com/questions/3403726/jquery-tablesorter-plugin-comma-decimals – 2012-01-27 00:35:59

回答

29

Tablesorter允許你爲這樣的事情定義「custom parsers」。

// add parser through the tablesorter addParser method 
$.tablesorter.addParser({ 
    // set a unique id 
    id: 'thousands', 
    is: function(s) { 
     // return false so this parser is not auto detected 
     return false; 
    }, 
    format: function(s) { 
     // format your data for normalization 
     return s.replace('$','').replace(/,/g,''); 
    }, 
    // set type, either numeric or text 
    type: 'numeric' 
}); 

$(function() { 
    $("table").tablesorter({ 
     headers: { 
      6: {//zero-based column index 
       sorter:'thousands' 
      } 
     } 
    }); 
}); 

您可能需要調整格式函數,我還沒有測試。

+0

我測試了你的解決方案,它工作。謝謝。我已經選擇了你接受的答案。我有很多像上面這樣的貨幣值的頁面,所以我在ts的格式函數中修復了jquery.tablesorter.min.js。addParser({id:「currency」...與s = s.replace(',','');建議[這裏](http://stackoverflow.com/questions/3403726/jquery-tablesorter-plugin-逗號 - 小數),感謝'布倫特安德森'爲此。感謝'約瑟夫西爾伯'爲您的建議以及 – SyAu 2012-01-27 02:05:14

+0

這失敗了多個'。或',即9.2(92)> 2.2.9(229) – Blowsie 2012-10-08 14:21:31

+0

@Blowsie,這並不令人驚訝,因爲數據不再符合'數千'格式規則。您需要開發一個解析器來專門處理您的數據。 – 2012-10-08 19:00:10

23

如果你只是想解決貨幣數量(最快):

<script type="text/javascript"> 
    $("table").tablesorter({ 
     textExtraction: function(node){ 
      // for numbers formattted like €1.000,50 e.g. Italian 
      // return $(node).text().replace(/[.$£€]/g,'').replace(/,/g,'.'); 

      // for numbers formattted like $1,000.50 e.g. English 
      return $(node).text().replace(/[,$£€]/g,''); 
     } 
    }) 
</script> 

<td><span>£80,000.00</span></td> 

我不StackOverflow上喜歡這些3級提出的解決方案:

  1. 「使用自定義語法分析器和應用表排序初始化' - 不可重複使用的批表
  2. '使用自定義分析器並應用表格單元格的類' - 髒標記
  3. '修復TableSorters貨幣排序源「 - 障礙爲未來的升級
+1

這真是太棒了。 – Cypher 2013-12-12 17:52:21

+0

這正是我一直在尋找的。 !! – 2014-03-10 05:21:22

+0

排序在ASC不工作出於某種原因 – user1012181 2015-05-20 15:12:16

15

如果你想解決所有的數據類型(最靈活):

<script type="text/javascript"> 
    $(function() { 
     $("table").tablesorter({ 
      textExtraction: function(node){ 
       var cell_value = $(node).text(); 
       var sort_value = $(node).data('value'); 
       return (sort_value != undefined) ? sort_value : cell_value; 
      } 
     }) 
    }) 
</script> 

<td data-value="2008-04-01">01 Apr 2008</td> 
<td>Alice</td> 
<td data-value="80.00"><span>£80.00</span></td> 

這有從分類數據,更可重複使用的分離顯示數據的優勢。

+0

真的很棒! – 2013-04-09 09:05:29

0

繼@Ownen提出了同樣的想法,因爲的tablesorter v2.16.0,你可以直接使用data-text屬性,而不需要聲明自己textExtraction功能(更多信息here):

<td data-text="2008-04-01">01 Apr 2008</td> 
<td>Alice</td> 
<td data-text="80.00"><span>£80.00</span></td> 

這屬性也可以與其他小部件一起使用,如math

注:爲了使之與output widget工作,你需要聲明output_dataAttrib選項:

$('#table').tablesorter({ 
    widgets: ["output"], 
    widgetOptions : { 
     output_dataAttrib: 'data-text' 
    } 
});