Skip to content
Github fork of Christian Bach's tablesorter plugin + awesomeness ~
JavaScript CSS HTML
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

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.


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




  • 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).


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!


  • 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
  • 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.16.4 (5/5/2014)

  • Docs

    • Fix stickyHeaders scroll position adjustment.
    • Update sticky headers widget demo to include the stickyHeaders_filteredToTop option
  • ColumnSelector widget: updated css to include print media for the new print widget.

  • cssStickyHeaders widget: add cssStickyHeaders_filteredToTop option.

  • Filter widget

    • Search operators (< <= >= >) now properly uses the parser.
    • Range, not matches (!) & search operators now search all rows as needed.
    • Add filter language option, set the lanuage of to, or and and. Fixes issue #602.
    • Prevent form submission when pressing enter within the filter.
    • Prevent javascript error if delayInit is set to true.
    • Add a bunch of filter tests.
  • Math widget

    • Add math_prefix and math_suffix options.
    • The demo now includes a bunch of mask examples and an interactive example.
  • Output widget

  • Pager:

    • Updated custom pager controls code to show the correct number of pages when the table is filtered.
    • Fixes issue #605.
  • Print widget (new)

    • The user can print all, visible or filtered rows. And, choose to print all, visible or selected columns (using the columnSelector widget).
    • By default, the widget is set to only print filtered rows & visible columns.
    • Note this required an update to the columnSelector widget to include print media.
    • Try out the print widget demo.
  • Miscellaneous

    • Add Metro dark theme css file & demo
    • Add Metro LESS file - see this interactive demo.
    • Add Bootstrap LESS file - see this interactive demo.
    • Metro style includes encoded images. The images & psd have also been included.

Version 2.16.3 (4/30/2014)

  • Docs:

  • Core:

    • Fix headers option indexing of cells in multiple header rows
      • Setting an index in the multiple row header will now correctly set the column parser.
      • See this demo - the 10th cell (zero-based index) in the header has the sorter set to "month".
    • Set processing icon to only show after 500ms, it will not show at all if the sort ends before then.
    • Check for jQuery's closest function and use it, or fall back to equivalent code (maintaining support for jQuery 1.2.6+). Fixes issue #597.
    • Remove widget init delay added in v2.16.1-beta.
  • Filter:

    • Remove old cached indexing:
    • Update check for "filter-parsed" class, because the getData function will only return the first class name starting with "filter-".
    • Filter select updates:
      • Add filter-select-nosort header class name to prevent select option sorting.
      • Filter select option sort now uses the assigned column parser to parse & sort the options.
      • Filter select options are now sorted using the textSorter function, if set, and if not set, it falls back to natural sorting.
      • Fixes issue #599.
      • Add note to ensure textSorter receives strings, or a javascript error occurs.
    • Select2 filterFormatter now allows setting of initial settings. Fixes issue #598.
  • Sticky Headers

Version 2.16.2 (4/27/2014)

  • Docs:
    • Added basic setup for output widget.
    • Show various updates.
    • Update readme with more resources.
  • Core:
    • update addRows method will now accept a string or jQuery object.
    • Sort direction is now counted correctly.
    • Add "emptyMin" & "emptyMax" setting to emptyTo option. Fixes issue #577.
    • Add internal config.$extraHeaders variable.
  • Filter widget:
    • Search already filtered rows when not exactly matching content. Fixes issue #593.
    • Ensure filter_functions option is not null. Fixes issue #593.
    • Filter formatter: set datepicker to null. Fixes issue #512.
  • Math widget: add data-math-mask for each cell.
  • StickyHeaders
    • Check for filters before trying to set focus. Fixes issue #594.
    • Add stickyHeaders_filteredToTop option. Fixes issue #570.
  • Input select parser: don't update columns with both sorter & filter disabled. See issue #570.

Version 2.16.1 (4/24/2014)

  • Core:
    • Fixed an issue where ajax loaded data would cause a javascript error because of improper ignoring of data.
    • Ajax loaded data will now be parsed and cached - so stuff like the grouping widget will work properly.

Version 2.16.0 (4/23/2014)

  • Docs

    • Add notice to readme about upgrading to v2.16.
    • Add question section to readme about where to ask questions, including the new IRC channel.
    • Update jQuery UI accordion code to reapply widgets to tables within the section, when open.
  • Build widget

    • Now works with HTML in the data
    • Add zebra widget to demos.
  • Core

    • Check more than the first tbody when detecting parsers. Fixes issue #589.
    • Apply widgets on table initialization after a short delay.
  • Filter widget:

    • Fix search already filtered rows
    • Fix filteredRows count & cleanup.
    • SetFilters now behaves more like a triggered search. Fixes issue #588.
    • Filterformatter - Fix both datepicker scripts to work properly with non-U.S. formats. Fixes issue #587.
  • Pager: Now stays on the same page after updating. Fixes issue #590.

  • Testing: Add some preliminary tests for the filter widget.
Something went wrong with that request. Please try again.