I\'m having a couple of problems with the JQuery tablesorter plugin. If you click on a column header, it should sort the data by this column, but there are a couple of problems:
The first problem is due to the fact that the table sorter auto detects the column to a 'text'-column (probably because the empty cells). To solve this use this code to initialize the tablesorter and set all the field to either digit or currency depending on the data:
<script type="text/javascript" >
jQuery(document).ready(function()
{
jQuery("#communityStats").tablesorter({
headers: { 2: { sorter:'digit' } ,
3: { sorter:'digit' } ,
4: { sorter:'digit' } ,
5: { sorter:'digit' } ,
6: { sorter:'digit' } ,
7: { sorter:'digit' } ,
8: { sorter:'currency' } ,
9: { sorter:'currency' } ,
10: { sorter:'currency' } ,
11: { sorter:'currency' }
}
});
});
</script>
I found that the following will work with unrecognized numeric (digit) columns. It appears that 0 is considered text by the current version (2.0.3) of tablesorter.
Including the sample from tvanfosson, this script at the bottom of your page would move your last row from the footer which prevents it from being sorted with the data within tbody and would force the sorter to use a numeric sort rather than the text sort it is using as you described.
$(document).ready(function() {
$('#communityStats').append("<tfoot></tfoot>");
$('#communityStats > tr:last').remove()
.appendTo('#communityStats > tfoot');
$("#communityStats").tablesorter({
debug: true,
headers: {
0:{sorter: 'digit'}
...
10:{sorter: 'digit'}
}
});
});
fixed header for tablesorter plugin :
css
table.tablesorter thead {
position: fixed;
top: 35px; //
}
JS
function tableFixedHeader() {
var tdUnit = $('.tablesorter tbody tr:first').children('td').length;
for(var i=0;i<tdUnit; i++) {
$('.tablesorter thead th').eq(i).width($('.tablesorter tbody td').eq(i).width());
}
$('.tablesorter').css('margin-top',$('.tablesorter thead').height());
}
HTML
<div id="container">
<div id="topmenu" style="height:35px;">some buttons</div>
<div id="tablelist" style="width:100%;overflow:auto;">
<table class="tablesorterw">.....</table>
</div>
</div>
Blank fields could be a problem (e.g they are not 0), try using custom parser which removes any non-numericals and forces values to integers (example: http://paste.pocoo.org/show/90863/ )
Put your 'total' row inside a <tfoot> </tfoot> tag right before the end of the table
I would suggest using some Javascript to remove the last row from the table. Add a footer and then re-add the removed row from the table. To solve the issue with empty data in a numeric cell you may need to add your own custom parser.
$(function() {
$('#communityStats').append("<tfoot></tfoot>");
$('#communityStats > tr:last').remove()
.appendTo('#communityStats > tfoot');
$('#communityStats').tablesorter();
});
I think the answer to #1 is that you have blank fields for some numerical columns causing the tablesorter to detect that column as a "string" column.