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.
- All of the original document pages have been included.
- Information from my blog post on undocumented options and lots of new demos have also been included.
- Change log moved from included text file into the wiki documentation.
- Basic alpha-numeric sort Demo.
- Links to demo pages can be found within the main documentation.
- More demos & playgrounds - updated in the wiki pages.
- Multi-column alphanumeric sorting.
- Multi-tbody sorting - see the options table on the main document page.
- 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.6+ (jQuery 1.4.1+ needed with some widgets).
- Works with jQuery 1.9+ ($.browser.msie was removed; needed in the original version).
- Copyright (c) 2007 Christian Bach.
- Original examples and docs at: http://tablesorter.com.
- Dual licensed under the MIT and GPL licenses.
- Big shout-out to Nick Craver for getting rid of the
eval()
function that was previously needed for multi-column sorting. - Big thanks to thezoggy for helping with code, themes and providing valuable feedback.
- Big thanks to ThsSin- for taking over for a while and also providing valuable feedback.
- Also extra thanks to christhomas and Lynesth for help with code.
- And, of course thanks to everyone else that has contributed, and continues to contribute to this forked project!
View the complete listing here.
Version 2.14.5 (12/16/2013)
- Pager
- Fix pager update when ajax returns no rows. Fixes issue #456.
- Add pager
processAjaxOnInit
option. Fixes issue #424. - Fix & document inconsistentcies in pager triggered event parameters.
- Disable pager arrows & show zero in display when
totalPages
is zero. Fixes issue #460. - Filter row is now included in sticky header while using the pager. Fixes issue #449.
- Lots of thanks to Lynesth for sharing code fixes :)
- Fix
stickyHeaders_attachTo
no positioning correctly. See issue #295.
Version 2.14.4 (12/14/2013)
- Add Bootstrap 2 theme. Thanks to themilkman.
- The
addRows
method now works with an empty table. Fixes issue #450. - Sticky headers widget
- Add
stickyHeaders_attachTo
option. Fixes issues #295 & #314. - Add
cssStickyHeaders_attachTo
option. Fixes issue #453. - Added padding to wrapper in demo so Chrome doesn't add a horizontal scroll bar
- Add
- Filter widget
- Fix forced search to work again (i.e.
$('table').trigger('search', false);
) - Fix child row filtering - see this Stackoverflow question
- Fix forced search to work again (i.e.
- Pager
- The pager will update properly when ajax returns no rows. Fixes issue #456
- Filter searches will now reset pager to the first page. Fixes issue #456
- The pager will now properly count filtered rows when including/excluding child rows. Fixes this Stackoverflow question.
- The table cache will once again update after an ajax call. Fixes issues #436 & #437.
Version 2.14.3 (12/2/2013)
- Core
- Refreshing widgets now only applies to previously installed widgets. Fixes issue #442.
- Pager
- Ajax arrays now accept html instead of cell contents, e.g.
<td class="red">- 10</td>
. Thanks @christhomas; fixes issue #434. - Add ajax counter to only allow the most recent request to process. Thanks @christhomas; fixes issue #443.
- When filtering rows, the output will now show zeros for row & page counts instead of empty strings.
- No more
fixedHeight
pager errors. Thanks @hempel; fixes issue #448.
- Ajax arrays now accept html instead of cell contents, e.g.
- Filter widget
- Exact filter matches now properly override other queries. Fixes issue #441.
- Reverse range
20 - 10
work properly, again. See issue #441. - Updated docs to show the filter precendence. See footnote (2) under Notes.
- Sticky Headers widget
- Now uses the filter widget
bindSearch
function allowing live search, delayed searching and escape to cancel on sticky header filters. - Thanks to @haraldkrischner for his help!
- Fixes issues #439 & #440.
- Now uses the filter widget
- CSS Sticky Headers widget (beta)
- Now works properly in IE9+.
- Thanks @gakreol
- Fixes issue #447.
- Added Semantic version sorting demo
- See the demo here.
- This demo does not use a custom parser nor widget, it requires a modified
semver.js
for node file to sort the column using thetextSorter
option. - The modified
semver-mod.js
file is contained within the new "extras" folder (tablesorter/js/extras) along with the original unmodifiedsemver.js
file. - Extra code is also included to highlight invalid semantic versions within the table.
- Fixes issue #395.
- Sorry I didn't get around to finding solutions for some of the other issues that I promised to have done this patch :(
Version 2.14.2 (11/25/2013)
- Removed Bootstrap filter cell background color. Fixes issue #425.
- Added css sticky header widget (beta)
- This widget uses css3 transforms to make the table header sticky. It's a bit jumpy in Chrome, but works well in other tested browsers.
- This widget doesn't appear to work in IE10, but it should... it will not work in IE8 and older.
- See issue #429 for more information.
- Stop repeat filter widget searches. Fixes issue #431.
- Prevent filter error. Fixes issue #432.
- Merged in and reverted issue #433.
- Editable widget
- Updated docs with missing
editable_editComplete
callback event name option. - Modified the
editable_columns
option to allow setting a column range string, e.g."2-4"
instead of creating an array ([2,3,4]
). - Fixes issue #435.
- Updated docs with missing
- Grouping widget
- Invalid group class now fails silently.
- Fixes issue #438.
Version 2.14.1 (11/22/2013)
- Filter widget
- External inputs bound using the filter
bindSearch
function now clear on the "filterReset" event. - Replace
Array.indexOf()
due to IE8.
- External inputs bound using the filter
- Pager (plugin & widget)
- Replace
Array.indexOf()
due to IE8. Fixes issue #388.
- Replace
- Themes
- Non-sortables headers now show the default cursor
- Fix Dropbox theme to work properly within the sticky header demo
- Fix Ice theme to include a top border in the sticky header demo
- Tweaked sticky header widget to better align columns in Firefox & adjust caption to hide border edges.
- See the sticky header demo to see these changes.
- Fixes #407.
- Documentation
- Update FAQ page to include information on the zebra widget not always working.
- Update demos to use Bootstrap 3.0.2.
- Add search instructions to the wiki documentation pages.
- Add link to FAQ & search instructions on the main documenation page.
- Add associated core version number to pager addon & widget, main widget file and filter formatter file.
Version 2.14.0 (11/19/2013)
Core
- Changed sorting algorithms:
- Due to problems with sorting multiple columns improperly sorting algorithms again include code to sort empty cells.
- Internal sorting again has separate ascending and descending functions; but the previous
$.tablesorter.sortNatural
(ascending only),$.tablesorter.sortNumeric
(ascending only) and$.tablesorter.sortText
(ascending only) functions are still available. - Custom text & numeric sort functions, added via
textSorter
andnumberSorter
options now require you to return the sort in the correct direction. - Custom sort functions no longer have empty cells automatically handled for you.
- Fixes issue #419.
- Added
sortStable
option which whentrue
will sort exactly equal items by placing them in their original unsorted order (or, perform a stable sort). - Removed double icon class names.
- Added
tabIndex
option- When
true
, a tabindex is added to the headers for keyboard accessibility; this was previously always applied - When
false
, table headers will not be included when tabbing through the page - Fulfills issue #415.
- When
Filter widget
- Setting a filter to build a select no longer causes an error. Fixes issue #421.
- Added
filter_saveFilters
option- When
true
, this option saves the current filters using the storage utility (local storage with cookie fallback). - This option is set to
false
by default. - See issue #388.
- When
- Allow multiple external filter inputs
- The
$.tablesorter.filter.bindSearch( $table, $external )
function now allows binding searches using the built-in functioning. - The bind search function will unbind any previously bound
keyup
andsearch
event listeners on the$external
elements. - External inputs must not have a
tablesorter-filter
class to distinguish them from internal filters. - If not using the
filter_anyMatch
option, external filters can be set to target specific columns by including adata-column
attribute. - See the new filter external inputs demo.
- The
- Filter reset button clicks will again trigger a
filterReset
event. Fixes issue #423.
Grouping widget
- Merged in fix for grouping widget + filter widget + child row widget.
- Updated demo with multi-child column styling.
- Thanks Xamamule in pull #414!
- This also fixes issue #422.
- Renamed variables & cleanup
- Added
group_dateString
function to format the date string forgroup-date
header class name.
Zebra widget
- Now skips removable rows added by other widgets, more specifically, it skips rows with a
remove-me
class name (set by theselectorRemove
option).
Docs updates
- Added a side menu with search to the main document page.
- The main documentation page now uses Bootstrap for some styles.
- Search includes a count with clear search, previous result and next result buttons.
- Search options included to find letters or whole words only, and choose if the search is case sensitive, or not.
- The advantage of this search over the browser's built-in search (Ctrl-F) is that this search will find text within the hidden content
- Indexing of the search results may not always be in order, i.e. "10/10" may not always be the lowest result on the page due to nested elements.
- Sorry, IE7 and older users, the search works but but is really slow. And the side menu styling leaves much to be desired (using Bootstrap).
- jQuery UI theme selector updates. See issue #407.
- Updated typos & css in various demos
- Added Utility options section for options used by parsers, storage utility and pager ajax data.
- Added removed options section.
- This applies to pager options available in the original version of tablesorter which are no longer supported.
- Fixes issue #416.
- Added
kbd
styling for better visualization of keyboard keys.
Other
- Renamed variables within the pager custom control demo (still in beta)
- Renamed variables within default widgets file
- Utilities: storage, addHeaderResizeEvent,, resizableReset
- Widgets: columns, resizable, stickyHeaders, uitheme, saveSort
- Updated parser-date-two-digit-year.js to allow changing the date range
- Set a different date range by adding a value to
table.config.dateRange
. - Instructions added to main documents under utility options
- Set a different date range by adding a value to
- Storage utility (
$.tablesorter.storage
) now accepts a jQuery object as well as a DOM object of the table$.tablesorter.storage( $('#mytable'), 'myvariable', 'YAY' );
, or$.tablesorter.storage( $('#mytable')[0], 'myvariable', 'YAY' );