我正在使用 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}
}
});
最佳答案
该插件有一个插件:
https://github.com/ascii-soup/Tablesorter-Static-Row-Plugin
另一种方法是,使用 tablesorter 插件中的 sortStart
和 sortEnd
绑定(bind),您可以有一个函数在排序之前删除跨行的列,并有一个函数添加排序后他们又回来了。上面的插件不适用于跨越所有列的行,因此需要两者的组合。
这是实现此目的的一种方法 - 在排序之前临时删除 colspan 并添加列,并在排序之后撤消更改(假设跨越所有列的行具有类 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/
附注静态行插件在最新的 JQuery 中存在一个错误 - 已嵌入到上面的 JSfiddle 中。
关于jquery - 使用带有列跨度的 jQuery Tablesorter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12920088/