Sortable Table
This javascript function makes tables sortable as a progressive enhancement.
How to use
After including the javascript function, sortable tables need to be initialized with a reference to the table element using code similiar to the following:
var table = document.getElementById('table-id');
new SortableTable(table);
(If you have more than one table, you will need to initialize each separately.)
All configuration is done in the HTML.
To make a column sortable, add an aria-sort
attribute to the
<th>
cell within the <thead>
which
describes that column. Use one of the following three values:
none
- if column isn’t sorted by default (on page load), but should be sortable.ascending
- column sorted in ascending order (smallest number first or A-A).descending
- column sorted in descending order (biggest number first or Z-A).
When a sortable column header is clicked, by default the code will look at the text content of each of the cells within that column, and will attempt to convert it to a floating point number using parseFloat()
, or otherwise will treat it a string.
If you have data which doesn’t parse to a float, but which shouldn’t simply by sorted as a string, then use a data-sort-value=""
attribute to specify an alternate value to use for sorting, either as a number or a string.
For example:
<td data-sort-value="2018-01-12">12 Jan 2018</td>
– Dates<td data-sort-value="123456">12,3456</td>
– Formatted numbers<td data-sort-value="9.2">£9.20</td>
– Currency amounts
If your table has row-groups, using multiple <tbody>
elements, then within each row-group, add the attribute scope="rowgroup"
to the cell which represents the header for that group.
Examples
Title | Amount | Date |
---|---|---|
Aardvark | 100 | 12 Jan 2018 |
Buffalo | 12 | 23 Feb 2017 |
Cantelope | 91 | 9 Dec 2013 |
Dog | 10,102 | 23 Mar 2019 |
Place | Amount | Value |
---|---|---|
Canada | 30,012 | £8 billion |
United Kingdom | 102,304 | £20 billion |
England | 81,913 | £8.1 billion |
Scotland | 10,102 | £1.2 billion |
Wales | 31,010 | £2.7 billion |
United States | 1,032,103 | £103 billion |
California | 304,103 | £31 billion |
New York | 845,103 | £12 billion |
Texas | 210,001 | £19 billion |