Skip to content

Instantly share code, notes, and snippets.

@thzinc
Created April 9, 2013 16:44
Show Gist options
  • Save thzinc/5347300 to your computer and use it in GitHub Desktop.
Save thzinc/5347300 to your computer and use it in GitHub Desktop.
Quick jQuery-powered script to make tables sortable if they have a <thead/> and <th/> elements.
(function($) {
$(function() {
function sortTable(event) {
var header = $(event.currentTarget);
var column = header.prevAll().length;
var table = header.closest("table");
var body = table.find("tbody");
var rows = body.find("tr");
var sortedRows = rows.get().sort(function(a,b) {
var aValue = $(a).find("td").eq(column).data("value.sortable");
var bValue = $(b).find("td").eq(column).data("value.sortable");
return (aValue < bValue) ? -1 : (aValue > bValue) ? 1 : 0;
})
if (table.data("column.sortable") == column) {
sortedRows.reverse();
table.removeData("column.sortable");
}
else {
table.data("column.sortable", column);
}
for (var i = 0, il = sortedRows.length; i < il; i++) {
var row = sortedRows[i];
body.append(row);
}
}
$("table")
.has("thead")
.find("thead th")
.off(".sortable")
.on("click.sortable", sortTable)
.end()
.find("tbody td")
.each(function(i, e) {
var cell = $(e);
var value = cell.text().trim();
var sortableValue = value;
var parsed
if (parsed = Date.parse(value)) {
sortableValue = parsed;
}
cell.data("value.sortable", sortableValue);
})
.end();
});
}(jQuery));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment