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" ...