tablesorter is a jQuery plugin for turning a standard HTML table with THEAD and TBODY tags into a sortable table without page refreshes. tablesorter can successfully parse and sort many types of data including linked data in a cell.
See the full documentation
###Demos
- Basic alpha-numeric sort Demo
- More demos can be found in the documentation
- Demos & playgrounds - updated in the wiki pages.
###Features
- Multi-column sorting.
- Parsers for sorting text, alphanumeric text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats) & time. Add your own easily
- Support for ROWSPAN and COLSPAN on TH elements.
- Support secondary "hidden" sorting (e.g., maintain alphabetical sort when sorting on other criteria).
- Extensibility via widget system.
- Cross-browser: IE 6.0+, FF 2+, Safari 2.0+, Opera 9.0+.
- Small code size.
- Works with jQuery 1.2.3+
###Documentation
Included all original document pages with updates from my blog post on undocumented options.
###Licensing
- Copyright (c) 2007 Christian Bach
- Main Examples and docs at: http://tablesorter.com
- Dual licensed under the MIT and GPL licenses:
###Change Log
View the complete listing here.
####Version 2.0.23.5 (2011-12-6)
- Updated the sticky header widget again to not interfere with the filter widget. Fix for issue #10.
####Version 2.0.23.4 (2011-12-6)
- Updated the sticky header widget to reposition the sticky header when scrolling left. Fix for issue #9.
- Updated the filter widget:
- Changed filter input from visibility hidden to display none. Fix/enhancement from issue #7.
- Modified the widget to better work with child rows. Added the
widgetFilterChildRows
option. Fix for issue #8. - When
widgetFilterChildRows
is true, all child row content is included in the row filtering; if false, the child row content is ignored.
- Added
tableClass
to the documents. Apparently I forgot to add it before. - Added a note to the filter demo bringing up issue #6.
- Miscellaneous updates to the documents.
- Fixed pager size & total pages not being retained after destroying, then restoring the pager. Thanks to crush123 for reporting the problem!
- Fixed the pager plugin to prevent errors when initialized on an empty table. Fix for issue #5.
- Added a Resizable Column widget
- At this time, this widget allows resizing the column widths from the header.
- The column widths are not saved, but if I did consider saving the widths to local storage. I just didn't get around to doing it.
- Demo page added.
- Reorganized the next demo links, located at the bottom of every demo page, to match the order on the main document page.
- Changed the
dateFormat
option: - The settings are now "mmddyyyy", "ddmmyyyy", and "yyyymmdd".
- Changed the date separator to include any of the following: slash, dash, period, comma, space(s) or tab.
- The date format parser will only work with a four digit year.
- Added a demo page.
- Updated the stickyHeaders widget
-
Sticky headers will now resize with the browser window
-
Updated blue and green themes to work better with sticky headers.
-
If using the uitheme widget, make sure the 'uitheme' widget is applied before (left of) the 'stickyHeaders' widget, as follows:
widgets: ['zebra', 'uitheme', 'stickyHeaders']
-
- Updated the pager plugin:
-
Fixed a problem that occurred when
removeRows
is set to false - fix for issue #4. -
Added "disable.pager" and "enable.pager" methods to the pager. These are useful if you want to delete a table row with the pager applied.
// Delete a row // this function targets a button with a "remove" class name inside a table row // ************* // Use delegate or live because `removeRows` is set to `true` in the demo - hidden rows don't exist $('table').delegate('button.remove', 'click' ,function(){ var t = $('table'); // disabling the pager will restore all table rows t.trigger('disable.pager'); // remove the chosen row $(this).closest('tr').remove(); // restore pager t.trigger('enable.pager'); });
-
Fixed the
positionFixed
option (which positions the pager below the table) to now include theoffset
option value. -
Fixed the pager arrow buttons so that destroying and enabling the pager multiple times doesn't multiply the number of pages changed.
-
Updated the pager demo page to allow deleting rows.
-
General cleanup and added lots of comments in the plugin and demo page on what each pager option does.
-
- Made one minor change to the tablesorter plugin to accomidate the pager plugin using the
removeRows
option.
- Added "stickyHeader" widget to the "jquery.tablesorter.widgets.js" file.
- This widget makes the header stick to the top of the page while scrolling down.
- The sticky header is fully functional and will allow you to sort the table.
- And best of all, it can be applied to the original tablesorter plugin.
- Thanks to Chris Coyier and his post on persistent headers.
- Added a compressed widget file named "jquery.tablesorter.widgets.min.js".
- Added
sortBegin
event- This event is triggered immediately before the actual sort. So this event occurs after the
sortStart
and after thesortList
option has been updated. - It was added to allow for changing the sort dynamically. See issue #3.
- This event is triggered immediately before the actual sort. So this event occurs after the
- Added
removeRows
option to the pager plugin- When
true
, the default value, the pager plugin removes all non-active rows from the table. This greatly increases the sort speed of large tables. - When
false
, the pager plugin merely hides the non-active rows so they all continue to exist in the table. This should allow for better access to data within the table (i.e. submitting form elements)
- When
- Oops fixed currency sorting
- Filter Widget
- Added "filter" to the "headers" option to allow disabling the filter option for a specific column - thanks jizo!
- Added "filter-false" class, that when applied will disable the filter widget for that column.
- Updated the headers docs and the filter widget demo.
- Updated the currency parser to use unicode characters to better work in different document formats.
- Added code in attempt to clear the table headers between multiple tables - fix for issue #2.
- Cleaned up some code and wrapped the widget code to prevent conflicts with other javascript libraries.
- Updated the columns widget:
- Added css examples to the demo.
- Removed the
widgetColumns
option from the core, but it is still used by the widget - the way it is used hasn't changed.
- Updated the uitheme widget:
- Added
widgetUitheme
option - used by the widget, but not included in the core. See the demo for a better example. - Example added to the uitheme widget demo.
- Added
- Updated the "uitheme" widget with method to add zebra striping and hovered header classes.
- Fixed a bug in the column widget, it would cause an error if no initial sort was set.
- Fixed a bug where an error would occur if a widget doesn't exist.
- Updated pager widget to allow restoring the pager plugin & updated demo.
- Added column filter widget. It is designed so that each column has an filter.
- Added a jquery.tablesorter.widget.js file:
- It contains the "uitheme" widget, to add any jQuery UI theme, and the new "columns" widget, to style columns.
- The blue and green themes have been updated with the added styles from the columns widget.
- Added a Columns Widget demo and instructions.
- Added a
widgetColumns
option which defines the css classes added by the columns widget. - Added notes to the pager plugin demo page to better specify when a change was added.
- The green theme header images have been modified to better work with variable width tables.
- Added notes to demo pages to indicate if the original (version 2.0.5, at tablesorter.com) does have that option or method.
- Added "addRows" method that allows adding table rows.
- This method differs from the "update" method in that it only adds rows to the cache.
- Use this new method to add rows to a table with the pager plugin applied. Using the "update" method on a table with the pager plugin will remove all hidden rows from the cache.
- Added a "destroy.pager" method to remove the pager from the table - pager demo updated.
- Fixed a problem that caused a javascript error when a table header cell doesn't have a class name.
- Reverted the changes made in 2.0.13 and added checks to prevent errors.
- Allowed sorting an empty table which would then automatically sort its contents when the table is updated.
- Modified "Update" and "UpdateCell" methods to automatically resort the table using the existing sort.
- Updated the Initializing tablesorter on an empty table demo and Updating a table cell.
- Fixed a problem where a javascript error would occur when initializing a multi sort on an empty table. Thanks again to Eugene Ivakhiv!
-
Updated the
textExtraction
functionality- The original textExtraction function was only able to be applied to all cells.
- Apparently the ability to define textExtraction on a per column basis was misinterpreted by me, so now I've added it.
- Use the option as follows:
$("table").tablesorter({ textExtraction: { 0: function(node) { return $(node).find(selector1).text(); }, 1: function(node) { return $(node).find(selector2).text(); }, // etc } });
- Updated the Dealing with markup inside cells demo.
- Thanks to Eugene Ivakhiv for bringing this issue to my attention in my blog.