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.
Notice!
- Because of the change to the internal cache, the tablesorter v2.16+ core, filter widget and pager (both plugin & widget) will only work with the same version or newer files.
Documentation
- 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.
Demos
- Basic alpha-numeric sort Demo.
- Links to demo pages can be found within the main documentation.
- More demos & playgrounds - updated in the wiki pages.
Features
- Multi-column alphanumeric sorting and filtering.
- Multi-tbody sorting - see the options table on the main document page.
- Supports Bootstrap v2 and 3
- Parsers for sorting text, alphanumeric text, URIs, integers, currency, floats, IP addresses, dates (ISO, long and short formats) & time. Add your own easily.
- Inline editing - see demo
- 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+, Chrome 5.0+.
- Small code size, starting at 25K minified
- 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).
Licensing
- Copyright (c) 2007 Christian Bach.
- Original examples and docs at: http://tablesorter.com.
- Dual licensed under the MIT and GPL licenses.
Related Projects
- Plugin for Rails. Maintained by themilkman.
- PHP templating engine for tablesorter by alexweissman.
Special Thanks
- 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!
Questions?
- Check the FAQ page.
- Search the main documentation (click the menu button in the upper left corner).
- Search the issues to see if the question or problem has been brought up before, and hopefully resolved.
- If someone is available, ask your question in the
#tablesorter
IRC channel at freenode.net. - Ask your question at Stackoverflow using a tablesorter tag.
- Please don't open a new issue unless it really is an issue with the plugin, or a feature request. Thanks!
Change Log
View the complete listing here.
Version 2.17.8 (9/15/2014)
- Core
- Fix
widthFixed
option to ignore info block tbodies. - Make
emptyTo
&stringTo
settings case insensitive. - An empty string
headerTemplate
option will now prevent adding an inner div to the header.
- Fix
- Docs
- Fix setting active accordion from hash script.
- Add
emptyTo
clarification. - Main readme: Add related projects section.
- Editable
- Autoresort true no longer breaks the table.
- Update demo to use row id instead of index.
- Update validate function to allow setting it per column.
- Add
editable_focus
,editable_blur
andeditable_selectAll
options. See issue #708. - Add
editable_wrapContent
option. - Add
editable_trimContent
option. - Validate function now includes a contenteditable element parameter.
- All text callback parameters are now trimmed.
- Trim everything & revert widget changes.
- Refocus edited element after resort only.
- Switch form focus to focusout.
- Filter
- Add
filter_defaultFilter
option.- fix issue with using class selectors.
- Make happy with spaces within the query.
- Will override exact/partial select filters. Fixes issue #721.
- Fixes issue #704.
- Add
filter_excludeFilter
option; add multiple exclusions separated by spaces, not commas. - Prevent multiple searches during initialization.
- Ensure initial filter settings get applied.
- Selects will exactly match the selected option unless "filter-match" class is set. Fixes issue #721.
- Add
- Pager
- Update cache & rows copy. Fixes issue #703.
- Use native javascript to populate & set the goto select. Fixes issue #711.
- Custom pager controls. Fix control updates for multiple tables.
- Fix pager widget to be properly applied after a page move.
- StickyHeaders: Fix issue so it works with jQuery v1.2.6 again.
- Zebra: Apply style to one row. Fixes issue #715.
- Parser
- Duration parser - added with demo.
- Select parser - Fix for IE10+ not allowing select options to be clicked.
- IgnoreArticles parser - Added
ignoreArticlesExcept
option. - url parser - ensure it is used by the filter widget.
Version 2.17.7 (8/9/2014)
- Core: Do not detach rows before appending to prevent ajax rows from disappearing. Fixes issue #701.
- Docs: Fix change log links.
- Filter: attached external select causing javascript errors. Fixes issue #702
Version 2.17.6 (8/1/2014)
- Core
- Adding a class name of
parser-false
to a column will now automatically setsorter-false
andfilter-false
behavior. - Add extractor type which allows giving a column two parsers, one to extract content from an input/select and the second to parse the extracted text. Thanks to TheSin-!
- Ensure custom parsed data adheres to the
ignoreCase
option. - Add a delay to any sort if there is an update in progress. This prevents issues with a sort being applied causing duplicate rows to be added to the table, hopefully.
- The
widthFixed
option now finds both visibleth
andtd
cells within the first row of the tbody to set column width percentages. - Ensure all rows have a set role for screen readers (
role="row"
). Fixes issue #690. - Redefine
c.$headers
when building headers for new/replaced header cells (not just content). Fixes issue #683.
- Adding a class name of
- Docs
- Fixed lots of minor HTML issues (e.g. missing closing
</li>
&<p>
tags)
- Fixed lots of minor HTML issues (e.g. missing closing
- Parsers
- Add parser for textareas within the
parser-input-select.js
file. - Modify input & textarea parser to only update the table cache when:
- The user presses enter (input) or alt + enter (textarea) within the element.
- When the element is blurred.
- Or, when the mouse leaves the tbody.
- Add parser for textareas within the
- Editable
- Add two new options:
editable_autoAccept
: accepts any changes made to the table cell automatically (true
by default)editable_validate
: a function used to validate the changes; return a valid string (null
by default)
- Modify
editable_columns
type check to prevent javascript errors. See pull #688. Thanks scratcher28! - Limit the
editable_columns
array value to columns within the table.
- Add two new options:
- Filter
- Make all options show within the current select when the
filter-onlyAvail
class is set on a column. - Updated & added docs for
$.tablesorter.filter.buildSelect
function to allow external calls to modify filter select options. - Update
filter_selectSource
to accept arrays instead of a function. This was documented as working, but it wasn't coded until now. Sorry! - Add
filter_selectSourceSeparator
option:- Include a separator within the
filter_selectSource
array (e.g. "a-z|A through Z"). - The text that is left of the separator is added to the option value, the the text on the right is added to the option text.
- So
"a-z|A through Z"
becomes<option value="a-z">A through Z</option>
. - Fixes issue #692.
- Include a separator within the
- Add
role="row"
to the filter row. Fixes issue #697. - Any match inputs now follow the
filter_startsWith
setting. See this Stackoverflow question.
- Make all options show within the current select when the
- Pager
- The
ouput
option can now include user modifiablestartRow
({startRow:input}
) orpage
({page:input}
) inputs within the output. - Remove selected attribute from page selector options. Fixes issue #700.
- The
- Resizable
- Update
$.tablesorter.addHeaderResizeEvent
function's first parametertable
to accept table DOM elements as well as jQuery objects. Fixes issue #687.
- Update