我为此处的任何重复道歉,我已经尝试过对该主题进行搜索但没有成功。我有一个表,我正在使用jQuery TableSorter进行排序,并使用自定义解析器对9列中的5列进行排序。通过表头文本触发时,自定义解析器运行良好,但我想通过表外的链接对表列进行排序。
对于那些没有使用自定义解析器的列,我可以使用以下实现通过表外链接对它们进行排序(参见http://tablesorter.com/docs/example-trigger-sort.html):
$(document).ready(function() {
$("table").tablesorter();
$("#trigger-link").click(function() {
// set sorting column and direction, this will sort on the first and third column the column index starts at zero
var sorting = [[0,0],[2,0]];
// sort on the first column
$("table").trigger("sorton",[sorting]);
// return false to stop default link action
return false;
});
});
现在我需要一些方法来排序我的列,这些列通过表外的链接使用自定义解析器。例如。我需要一些方法来使用上面的代码来触发以下代码(请参阅http://tablesorter.com/docs/example-parsers.html):
// add parser through the tablesorter addParser method
$.tablesorter.addParser({
// set a unique id
id: 'grades',
is: function(s) {
// return false so this parser is not auto detected
return false;
},
format: function(s) {
// format your data for normalization
return s.toLowerCase().replace(/good/,2).replace(/medium/,1).replace(/bad/,0);
},
// set type, either numeric or text
type: 'numeric'
});
$(function() {
$("table").tablesorter({
headers: {
6: {
sorter:'grades'
}
}
});
});
任何想法或建议将不胜感激。
干杯,
杰克
答案 0 :(得分:0)
tablesorter的工作方式是在初始化时,它通过整个表执行并保存来自每个单元的数据。该数据首先由解析器处理并存储在内部数组中。
对列进行排序时,原始tablesorter实际对内部数组进行排序,然后使用交叉引用以排序顺序将表行添加回表中。这甚至适用于外部链接。 Tablesorter对内部数组进行排序,并将行添加回表中。
刷新内部缓存中数据的唯一方法是触发"更新"它将使用解析器重新处理所有表格单元格,以重建内部数组。
所以......如果要对使用自定义解析器的列进行排序,请执行与没有自定义解析器的列完全相同的操作。例如,如果自定义解析器位于第5列,则使外部链接代码如下所示:
$("#trigger-link").click(function() {
// apply an ascending sort on the 5th column (zero-based index)
$("table").trigger("sorton",[ [[4,0]] ]);
return false;
});