<script type="text/javascript">
jQuery.fn.dataTableExt.oSort['formatted-num-asc'] = function(x,y) {
x = x.replace(/[^\d\-\.\/]/g, '');
y = y.replace(/[^\d\-\.\/]/g, '');
if(x.indexOf('/') >= 0) x = eval(x);
if(y.indexOf('/') >= 0) y = eval(y);
return x/1 - y/1;
}
jQuery.fn.dataTableExt.oSort['formatted-num-desc'] = function(x,y) {
x = x.replace(/[^\d\-\.\/]/g, '');
y = y.replace(/[^\d\-\.\/]/g, '');
if(x.indexOf('/') >= 0) x = eval(x);
if(y.indexOf('/') >= 0) y = eval(y);
return y/1 - x/1;
}
$(document).ready(function() {
$('table#example').dataTable({
aoColumns: [
{sTitle: 'ID', sType: 'numeric'},
{sTitle: '売上', sType: 'formatted-num'}
],
aaData: [
[12, '12,359'],
[25, '126,359'],
[7, '6,126,359']
]
});
});
</script>
注意点
- 正規表現で「,」を除去するため、JavaScript 内は値を文字列にする必要がある。
例えば、<?php printf("[%d, '%s'],", 12, number_format(6548625.02)); ?> と出力時に、「'」か「"」で囲んで、JavaScript に文字列として認識ささせる。
「,」が含まれた数値なのだから、当然か…。
- 値を数値型として出力すると、エラーが発生する。(当然といえば、当然)
参考
- DataTables - Plug-ins - Formatted numbers
Removes any non-numeric (or a dot) characters, such that you can format numbers (for example 1,000,000) for easy reading. This plug-in allows those formatted numbers to be sorted numerically.
注: リンク先のサンプルコードは昇順と降順のメソッドが逆になっていると思われる。