Для маленьких столов я делаю это так ...
sortTable = function(tableName, rowClass, columnNumber, ascending) {
var row, cell, cellContent;
var comparisonRow, comparisonCell, comparisonContent;
$("#" + tableName + " tr." + rowClass).each(function(i) {
row = $("#" + tableName + " tr." + rowClass + ":eq(" + i + ")");
cell = $(row).find("td:eq(" + columnNumber + ")");
cellContent = $(cell).html();
$("#" + tableName + " tr." + rowClass).each(function(j) {
comparisonRow = $("#" + tableName + " tr." + rowClass + ":eq(" + j + ")");
comparisonCell = $(comparisonRow).find("td:eq(" + columnNumber + ")");
comparisonContent = $(comparisonCell).html();
if ( (ascending && cellContent < comparisonContent) || (!ascending && cellContent > comparisonContent) ) {
$(row).insertBefore(comparisonRow);
return false;
}
});
});
};
Объяснение: Функция просматривает каждую строку (указанного класса) указанной таблицы, записывает содержимое HTML (из ячейки указанного столбца), а затем просматривает все строки таблицы, сравнивающие содержимое ячейки (снова из указанного столбца). Когда содержимое ячейки меньше или больше (в зависимости от того, установлено ли для параметра «возрастание» значение true), строка вставляется перед той, с которой она сравнивалась.
Пример вызова будет ...
sortTable("sample_table", "data_row", 0, true);
... которые будут сортировать строки, имеющие класс «data_row», внутри таблицы с именем «sample table» на основе ячеек в первом столбце (т. Е. Индекс столбца 0) в порядке возрастания.
Для больших таблиц и дополнительных функций я использую ...
Справа, я нахожу, что DataTables намного проще в использовании, чем TableSorter (например, нет необходимости ссылаться или добавлять дополнительные CSS и графические объекты, если вы не хотите), и документация превосходна. Мне также нравится функциональность по умолчанию (например, функция поиска).