Для решения первой проблемы вы можете создать собственное отображение заголовков на столбцы данных. вот что я сделал, чтобы получить функциональность так, как я хотел.
Я добавил следующий метод в tablesorter.js:
function findInMap(map, index, reverse) {
for(var i = 0; i < map.length; ++i) {
if(map[i][reverse ? 1 : 0] == index) return map[i][reverse ? 0 : 1];
}
return index;
}
А также добавил следующее к this.defaults
customMap: []
, измените следующий метод:
function setHeadersCss(table,$headers, list, css) {
$headers.removeClass(css[0]).removeClass(css[1]);
var h = [];
$headers.each(function(offset) {
if(!this.sortDisabled) {
h[this.column] = $(this);
}
});
var l = list.length;
for(var i=0; i < l; i++) {
var header = list[i];
var headerIndex = findInMap(table.config.customMap, header[0], true);
h[headerIndex].addClass(css[header[1]]);
}
}
И последнее, но не менее важное: добавьте / измените следующее в $headers.click(function(e) {
Добавить:
var ia = findInMap(config.customMap, i, false);
Изменение:
config.sortList.push([i,this.order]);
К config.sortList.push([ia,this.order]);
Когда вы инициируете сортировщик таблиц, передайте customMap[[header_col_id, data_col_id]]
В вашем случае это будет:
customMap[
[2, 4],
[3, 5],
...
]