Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Github fork of Christian Bach's tablesorter plugin: http://tablesorter.com

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
addons/pager
css
docs
js
README.markdown
changelog.txt
index.html
package.json

README.markdown

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.

Documentation

Demos

Features

  • Multi-column 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+.

Licensing

Change Log

View the complete listing here.

Version 2.3.5 (5/28/2012)

  • Fixed colspan in header causing javascript errors and metadata issues. Fix for issue #78.
  • Fixed Chrome "Uncaught RangeError" issue. Fix for issue #70.
  • Added more optimizations to speed up IE (except IE7):
    • Hide tbody during manipulation - added "tablesorter-hidden" css definition.
    • Parsing of the table contents using textContent for modern browsers (including IE9); see this jsperf.
    • Columns widget.
    • Filter widget.
    • Zebra widget.
  • Updated the shortDate detection regex to look for two or four grouped digits instead of two through four digits. Fix for issue #76.
  • Widget updates:
    • Added initWidgets option
      • If true, all selected widgets (from the widgets option) will be applied after the table has initialized.
      • when false, selected widgets init function will be called, but not the format function. So none of the widget formating will be applied to the table. Note: almost all included widgets do not use the init function to keep backward compatibility, except for the saveSort widget in which the init function immediately calls the format function. This information is only important if you are writing a custom widget.
      • It would be useful to set this option to false if using the pager plugin along with a very large table, say 1000+ rows. The table will be initialized, but no widgets are applied. Then the pager plugin is called and the table is modified and all of the widgets are applied when completed. So essentially this saves time by only running the widgets once.
      • Modified the pager plugin to make sure it doesn't apply widgets more than once.
    • Added filter widget option filter_ignoreCase:
      • The default setting is true and all searches will be case insensitive.
      • Set this option to false to make the searches case sensitive.
    • Added filter widget option filter_searchDelay:
      • Default set to 300 milliseconds.
      • This is the delay before the filter widget starts searching.
      • This option prevents searching for every character while typing and should make searching large tables faster.
    • Resizable widget will no longer initialize a sort after releasing the mouse.
    • Updated ui theme css to remove bold fonts from odd rows.

Version 2.3.4 (5/20/2012)

  • Added selector change suggested by AnthonyM1229 in issue #74 to fix IE8 ignoring class name parsers. Thanks again Anthony for all of your hard work and input!

Version 2.3.3 (5/19/2012)

  • Fixed the method used to get data from jQuery data, meta data, header options or header class names.
    • This should fix the "filter-false" problem reported in issue #73,
    • and fix issue #74 with setting parsers by class name.
  • Performance improvements:
    • Modified the zebra and columns widget to use document fragments to modify changes to the table. I didn't log all of the times, but there was a speed increase in reported time when using the triggered events demo (1022 rows).
    • Changed the shortDate parser to cache header information.
  • Updated multiple demos to show how to set some options using jQuery data, class names, etc.

Version 2.3.2 (5/11/2012)

  • Added a method to remove tablesorter from a table
    • Use $('table').trigger('destroy'); to remove it.
    • Some classes applied by widgets will remain (zebra, columns, etc); but the functionality will be removed. I've been thinking about adding a "remove" function to each widget to specifically remove that widget.
    • Rows hidden by the filter widget will not reappear. I may work on an option to fix that in the future.
    • The "tablesorter" class is removed from the table; but if you want to leave this class, then use this example: $('table').trigger('destroy', [false]);.
  • Fixed percent parser to not be automatically applied to text columns. Fix for issue #67.
  • Fixed filter widget not working in v2.3.1. It was actually a problem with getting jQuery data breaking the widget.
  • The first tbody can now be an info block.
  • The zebra and column widgets should now properly ignore info blocks (it was missing periods in the class selectors!).
  • Text extracted from table cells is now automatically trimmed of extra spaces, tabs and carriage returns. If these elements are important to you, then please refer to the advanced use custom parser demo which allows you to access the table cell $(cell) directly.
  • Fixed and/or updated a bunch of demos:
    • Demos that include jQuery UI seem to need jQuery v1.4+ now or script errors will completely break the plugin. Updated ui theme and sticky headers widget demos.
    • Render headers demo now targets the div wrapping header cell contents. Previously it was a span.

Version 2.3.1 (5/8/2012)

  • Fixed an issue where header & metadata settings would ignore sorter:false inappropriately.
  • Fixed minified version:
    • Apparently Dean Edwards packer now breaks the minified version, so I switched to using Uglify.
    • I prefer Google Closure Complier but it completely removes the eval needed to get multi-column sorting to work unless the "Whitespace only" mode is used and results in a file 2k larger than the Uglify version.
  • Modified header settings to now check for settings with the following priority: jQuery data > metadata > headers option > header class name > overall option. Added:
  • Added the ability to set the sortList via jQuery data. See the updated sortList documents on how to use it
  • Fixed date parsers (isoDate, usLongDate, shortDate and time) which did not handle empty cell data properly.

Version 2.3 (5/8/2012)

  • Added ability to sort all columns under a header cell that spans multiple columns.
    • Previously clicking on the header cell would only sort the left-most column.
    • Added a demo.
  • Added support for "Content-type: application/xhtml+xml". Fix for issue #62. Thanks to MelTraX for the fix!
  • Added delayInit option:
    • This option delays parsing of all table cell data until the user initializes a sort.
    • This speeds up the initialization process of very large tables, but the data still needs to be parsed, so the delay is still present upon initial sort.
    • Enhancement suggested by MelTraX in issue #66.
  • Column parsers & settings can now be set using jQuery data.
    • This setting has a higher priority than metadata: jQuery data > metadata > headers option > header class name > overall setting.
    • This applies to the parsers, stringTo and emptyTo options.
  • Nested tables will no longer be targeted inappropriately. Fix for issue #65. Thanks to MelTraX for sharing some code!
  • Reordered parsers to detect other numeric parsers before the general one. Fix for issue #64.
  • Completed minor document corrections, general code cleanup, optimization and removal of a global variable.
Something went wrong with that request. Please try again.