Tablesorter 2.0.3 colspan问题

我使用Tablesorter 2.0.3时遇到了一些问题。

第一个问题是我在桌子上设置了一个colspan。 基本上当我这样做时,它不会对各自的列进行排序。

Four Five Six Seven
1 2 3 4 5 6 7

我遇到的第二个问题是,无论我在tablesorter.js中设置sortInitialOrder(“desc”或“asc”),它都没有任何影响,当它被点击时使排序升序或降序。

请任何人可以帮忙吗?

要解决问题1,您可以创建自己的标头到数据列的映射。 这就是我按照我想要的方式获得function的方法。

我已经将以下方法添加到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添加了以下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) {添加/更改以下$headers.click(function(e) {

加:

 var ia = findInMap(config.customMap, i, false); 

更改: config.sortList.push([i,this.order]); to config.sortList.push([ia,this.order]);

当你初始化tablesorter传递一个customMap[[header_col_id, data_col_id]]在你的情况下,它将是:

 customMap[ [2, 4], [3, 5], ... ] 

如果您点击跨越三列的标题,您会发生什么? 您期望它在哪一列上排序? 通常,要使tablesorter工作,您需要为每列提供一个标头。

在tablesorter的网页上似乎没有提到sortInitialOrder ,但它确实存在于代码中。 我以前只用过这个:

 sortList: [[5, 0]] 

最初将使用第5列进行升序排序。

我有点解决了这个问题,因为我也只想让表格按升序排序,我将第536行修改为this.order = this.count++ % 0; 这使它按我的意愿排序。

关于colspan,我只需要使用空白来对它进行排序。 它可能不是正确的标记,但我看不到其他方法来解决这个问题。

我已经通过tablesorter-code本身中的以下补丁为自己解决了类似的问题;

 Index: jquery.tablesorter.js =================================================================== --- jquery.tablesorter.js (.../original) (revision x) +++ jquery.tablesorter.js (.../mine) (revision y) @@ -278,7 +278,10 @@ cache.row.push(c); for (var j = 0; j < totalCells; ++j) { - cols.push(parsers[j].format(getElementText(table.config, c[0].cells[j]), table, c[0].cells[j])); + var cSpan = c[0].cells[j].colSpan || 1; + while (cSpan--) { + cols.push(parsers[j].format(getElementText(table.config, c[0].cells[j]), table, c[0].cells[j])); + } } 

尽管我的问题被逆转了; 我有2列横跨1个collspanned细胞。 这可以在跨区列仍可排序后修复所有列。