我正在使用tablesorter插件,我有一个列以hh:mm:ss格式排序。 分拣机:'时间'不起作用。有没有办法对此列进行排序? 感谢
我试过这样但是它没有对colum进行排序
ts.addParser({
id: "customDate",
is: function(s) {
return false;
},
format: function(s) {
s = s.replace(/:/g," ");
s = s.split(" ");
return $.tablesorter.formatFloat(new Date(s[0], s[1]-1, s[2]).getTime()+parseInt(s[3]));
},
type: "numeric"
});
答案 0 :(得分:1)
已经有一个用于tablesorter的内置时间解析器,但它会查找" AM"或" PM"。
但看起来您需要使用计时器时间(hh:mm:ss
或其他任何方式)进行排序。
以下解析器代码看起来有点复杂,但它应该涵盖列只包含秒(ss
)或分钟&秒(mm:ss
)。
需要maxDigits
设置,因为解析器基本上是在值上添加前导零以保持值一致,因此10:30:40
变为010030040
(当maxDigits
为时设置为3
)。
无论如何,here is a demo:
$(function () {
// change maxDigits to 4, if values go > 999
// or to 5 for values > 9999, etc.
var maxDigits = 3;
$.tablesorter.addParser({
id: "times",
is: function (s) {
return false;
},
format: function (s) {
// prefix contains leading zeros that are tacked
var prefix = new Array(maxDigits + 1).join('0'),
// split time into blocks
blocks = s.split(/\s*:\s*/),
len = blocks.length,
result = [];
// add values in reverse, so if there is only one block
// (e.g. "10"), then it would be the time in seconds
while (len) {
result.push((prefix + (blocks[--len] || 0)).slice(-maxDigits));
}
// reverse the results and join them
return result.length ? result.reverse().join('') : s;
},
type: "text"
});
$('table').tablesorter({
theme: 'blue',
headers: {
3: {
sorter: 'times'
}
}
});
});
我不确定这对你是否重要,但也有一个"持续时间"可用的解析器允许在时间之后添加标签(例如10y 30d 6h 10m
) - 请参阅this demo