3

我正在使用 jQuery tablesorter 插件对包含 14 列的表进行排序。但是,每隔一段时间我需要插入一个跨越所有 14 列的行。但这似乎破坏了排序功能(只有第一列排序,所有其他列都被破坏了)。

JavaScript 错误表明 jquery.tablesorter.js 在此返回语句上失败:

function getCachedSortType(parsers,i) {
    return parsers[i].type;
};

有谁知道如何让排序忽略一行?

这是我当前的代码(我不是为了简化而对前两列进行排序):

$("#myTableId").tablesorter({
    textExtraction: function(node){
        var cellValue = $(node).html();
        return (cellValue == null ? "" : cellValue);
    },
    headers: {
        0: {sorter:'text'},
        1: {sorter:'text'},
        2: {sorter: false},
        3: {sorter: false},
        4: {sorter: false},
        5: {sorter: false},
        6: {sorter: false},
        7: {sorter: false},
        8: {sorter: false},
        9: {sorter: false},
        10: {sorter: false},
        11: {sorter: false},
        12: {sorter: false},
        13: {sorter: false}
    }
});
4

2 回答 2

3

该插件有一个插件:

https://github.com/ascii-soup/Tablesorter-Static-Row-Plugin

另一种方法是使用 tablesorter 插件中的sortStartandsortEnd绑定,您有一个函数可以在排序之前删除跨行的列,以及一个在排序之后将它们添加回的函数。上面的插件不适用于跨越所有列的行,因此需要将两者结合起来。

这是一种方法 - 暂时删除 colspan 并在排序之前添加列并在排序之后撤消更改(假设跨越所有列的行具有 class fullSpan):

$("#myTableId").bind("sortStart",function() { 
        var colCount = getColCount();
        $('tbody .fullSpan').each(function() {
            $(this).removeAttr('colspan');
            for (var i= 0; i < colCount; i++) {
                 $(this).append('<td class="temptd"></td>');
            }
        }); 
}).bind("sortEnd",function() { 
        var colCount = getColCount();
        $('.temptd').remove();
        $('tbody .fullSpan').each(function() {
                 $(this).attr('colspan', colCount);
        });
}); 

如果需要,您可以将其与静态行插件结合使用(添加小部件和static类)。

看看这个 jsfiddle:http: //jsfiddle.net/DrZgM/20/

PS 静态行插件与最新的 JQuery 有一个错误 - 已嵌入到上面的 JSfiddle 中。

于 2012-10-16T21:52:34.453 回答
0

此问题已在 2.3 或更高版本中修复。看看这个描述

于 2013-11-07T09:40:26.073 回答