Tablesorter 2.0.3 colspan问题

时间:2010-01-09 21:37:20

标签: jquery jquery-plugins html-table tablesorter

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

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

<table> 
<thead> 
        <th colspan="3"></th>  
        <th>Four</th> 
        <th>Five</th>
        <th>Six</th>
        <th>Seven</th>  
</thead> 
<tbody> 
<tr> 
        <td>1</td> 
        <td>2</td> 
        <td>3</td> 
        <td>4</td>
        <td>5</td> 
        <td>6</td>
        <td>7</td>
</tr>  
</tbody> 
</table> 

我遇到的第二个问题是,无论我在tablesorter.js中设置sortInitialOrder(“desc”或“asc”),单击它时对它进行升序或降序都没有任何作用。上。

请有人帮忙吗?

4 个答案:

答案 0 :(得分:3)

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

我已经将以下方法添加到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]);

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

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

答案 1 :(得分:2)

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

在tablesorter的网页上似乎没有提到

sortInitialOrder,但它确实存在于代码中。我之前只用过这个:

sortList: [[5, 0]]

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我已经通过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细胞。这可以在跨区列仍可排序后修复所有列。