Tablesorter demo
All options included, as well as the uitheme widget
by Mottie
HTML
<script src="http://mottie.github.com/tablesorter/js/jquery.tablesorter.js"></script>
<script src="http://mottie.github.com/tablesorter/js/jquery.tablesorter.widgets.js"></script>
<link rel="stylesheet" href="http://mottie.github.com/tablesorter/css/theme.blue.css">
<table class="tablesorter">
<thead>
<tr>
<th>AlphaNumeric Sort</th>
<th data-metric-name="b|byte">Metric Size</th>
<th>Pet</th>
<th data-metric-name="m|meter">Metric Length</th>
</tr>
</thead>
<tbody>
<tr>
<td>abc 123</td>
<td>1 byte</td>
<td>Koala</td>
<td>1 nm</td>
</tr>
<tr>
<td>abc 1</td>
<td>1 kb</td>
<td>Ox</td>
<td>1 kilometer</td>
</tr>
<tr>
<td>abc 9</td>
<td>1 Gigabyte</td>
<td>Girafee</td>
<td>1 Gm</td>
</tr>
<tr>
<td>zyx 24</td>
<td>10 Mb</td>
<td>Bison</td>
<td>1 Tm</td>
</tr>
<tr>
<td>abc 11</td>
<td>1 Mb</td>
<td>Chimp</td>
<td>1,000 mm</td>
</tr>
<tr>
<td>abc 11</td>
<td>1 Tb</td>
<td>Chimp</td>
<td>1 meter</td>
</tr>
<tr>
<td>abc 2</td>
<td>1 Pb</td>
<td>Elephant</td>
<td>1 hm</td>
</tr>
<tr>
<td>abc 9</td>
<td>1 Zb</td>
<td>Lion</td>
<td>1 dam</td>
</tr>
<tr>
<td>ABC 10</td>
<td>1,025 Mb</td>
<td>Zebra</td>
<td>1 Mm</td>
</tr>
<tr>
<td>zyx 1</td>
<td>1,000 kilobytes</td>
<td>Koala</td>
<td>1 dm</td>
</tr>
<tr>
<td>zyx 12</td>
<td>1 Eb</td>
...
JavaScript
$(function(){
$.tablesorter.addParser({
// set a unique id
id: 'metric',
is: function(s) {
return false;
},
format: function(s, table, cell, cellIndex) {
var v = 'm|meter',
t, m, b,
// process number here to get a numerical format (us or eu)
n = $.tablesorter.formatFloat(s.replace(/[^\w,. \-()]/g, ""), table);
t = $(table).find('thead').children().children('[data-column="' + cellIndex + '"]');
m = t[0].metric;
if (!m) {
t = (t.attr('data-metric-name') || v).split('|');
m = [ t[1] || t[0].substring(1), t[0] ];
// the \\d+ will not catch digits with spaces, commas or decimals; so use the value from n instead
m[2] = new RegExp("(\\d+)(\\s+)?([Zz]etta|[Ee]xa|[Pp]eta|[Tt]era|[Gg]iga|[Mm]ega|kilo|hecto|deka|deci|centi|milli|micro|nano|pico|femto|atto|zepto|yocto)(" + m[0] + "|" + m[1] + ")");
m[3] = new RegExp("(\\d+)(\\s+)?(Z|E|P|T|G|M|k|h|da|d|c|m|µ|n|p|f|a|z|y)(" + m[1] + ")"),
m[4] = {
// "prefix" : [ base 10, base 2 ]; ignoring IEEE 1541
// defined prefixes: kibibyte, mebibyte, etc.
"Y|Yotta|yotta" : [ 1e24, 1.2089258196146292e24 ], // 1024^8
"Z|Zetta|zetta" : [ 1e21, 1.1805916207174113e21 ], // 1024^7
"E|Exa|exa" : [ 1e18, 1.152921504606847e18], // 1024^6
"P|Peta|peta" : [ 1e15, 1125899906842624 ], // 1024^5
"T|Tera|tera" : [ 1e12, 1099511627776 ], // 1024^4
"G|Giga|giga" : [ 1e9, 1073741824 ], // 1024^3
"M|Mega|mega" : [ 1e6, 1048576 ], // 1024^2
"k|Kilo|kilo" : [ 1e3, 1024 ], // 1024
// prefixes below this are rarely, if ever, used in binary
"h|hecto" : [ 1e2, 1e2 ],
"da|deka" : [ 1e1, 1e1 ],
"d|deci" : [ 1e-1, 1e-1 ],
"c|centi" : [ 1e-2, 1e-2],
"m|milli" : [ 1e-3, 1e-3 ],
"µ|micro" : [ 1e-6, 1e-6 ],
"n|nano" : [ 1e-9, 1e-9 ],
"p|pico" : [ 1e-12, 1e-12 ],
"f|femto" : [ 1e-15, 1e-15 ],
"a|atto" ...