我看到另一个人有同样的问题(jquery tablesorter ajax table only sorting one direction),但原因并不相同。
我使用jQuery Tablesorter(https://github.com/Mottie/tablesorter)的fork来使用数据属性通过自定义解析器(法语日期/时间)对列进行排序:
<td data-since="28-09-2012 15:41:10">
<strong>4 jours, 16 minutes</strong> (28-09-2012 15:41:10)
</td>
我可以成功地对列进行排序,但是当我尝试再次单击列标题时,插件不会显着排序。
其他具有基本数据格式的列在两个方向上都正确排序。
这是自定义解析器,基于doc和其他stackoverflow帖子:
$(document).ready(function() {
//https://stackoverflow.com/questions/9550354/jquery-tablesorter-plugin-secondary-hidden-sorting
$.tablesorter.addParser({
// set a unique id
id: 'parseSinceColumn',
is: function(s) {
return /\d{1,2}-\d{1,2}-\d{1,4} \d{1,2}:\d{1,2}:\d{1,2}/.test(s);
},
format: function(s, table, cell, cellIndex) {
// get data attributes from $(cell).attr('data-something');
var cellDate = $(cell).attr('data-since');
s = s.replace(/\-/g," ");
s = s.replace(/:/g," ");
s = s.split(" ");
return new Date(s[2], s[1]-1, s[0], s[3], s[4], s[5]).getTime();
},
// set type, either numeric or text
type: 'numeric'
});
$("#pr-table").tablesorter({
headers : {
3 : { sorter: 'parseSinceColumn' }
}
});
});
您是否知道如何解决这个问题?
非常感谢。
编辑:
我认为插件真的尝试排序,但结果是一样的。
以下是插件的调试:
在3,1和dir 1时间(8ms)上进行排序
重建表(3ms)
完成应用小部件(0ms)
按3,0和dir 0时间(7ms)排序
重建表(3ms)
完成应用小部件(0ms)
答案 0 :(得分:1)
我终于找到了解决方案。
有两个粗略错误:
我告诉插件,索引列3有解析器'parseSinceColumn',所以“is”函数应该返回false。实际上,单元格的内容与正则表达式不匹配,因为's'不是数据属性的内容,因此插件无法检测到该列是该列的良好解析器
这是最后和功能性片段:
$(document).ready(function() {
//http://stackoverflow.com/questions/9550354/jquery-tablesorter-plugin-secondary-hidden-sorting
$.tablesorter.addParser({
// set a unique id
id: 'parseSinceColumn',
is: function(s) {
return false;
},
format: function(s, table, cell, cellIndex) {
var cellDate = $(cell).attr('data-since');
// get data attributes from $(cell).attr('data-something');
// check specific column using cellIndex
cellDate = cellDate.replace(/\-/g," ");
cellDate = cellDate.replace(/:/g," ");
cellDate = cellDate.split(" ");
return new Date(cellDate[2], cellDate[1]-1, cellDate[0], cellDate[3], cellDate[4], cellDate[5]).getTime();
},
// set type, either numeric or text
type: 'numeric'
});
$("#pr-table").tablesorter({
headers : {
3 : { sorter: 'parseSinceColumn' }
}
});
});