我正在使用JQuery Tablesorter版本2.17.8对表格进行排序 我创建了一个自定义解析器来对日期进行排序,然后是一个时间,后跟一个可选的字符串。
解析器如下所示:
$.tablesorter.addParser({
id: "datetime",
is: function (s) {
return /\d{2}\-\d{2}\-\d{2}\s\d{2}:\d{2}(door \w+)?/.test(s);
}, format: function (s) {
arr = s.split(/[\s\-:]/);
if(arr[0] == "") // table column is empty
timestamp = null;
else {
// Month is zero-indexed so subtract one from the month inside the constructor
date = new Date(Date.UTC('20' + arr[2], arr[1] - 1, arr[0], arr[3], arr[4])); // Y M D H M
timestamp = date.getTime();
}
console.log(timestamp);
return timestamp;
}, type: "numeric"
});
要排序的表列的示例数据:
解析器按预期工作,但我希望将空单元格排序到底部,这似乎不起作用。
我把它放在我的PHP文件中:
<script type="text/javascript">
{literal}
$(document).ready(function()
{
$("#betalingen").tablesorter( {
headers: {
5 : { sorter: false } }, // disable sorting for column #5
widgets: ["saveSort", "zebra"], // apply alternating row coloring
sortList: [[2,0]], // initial sorting order for Date column = ascending (0)
emptyTo: 'bottom' // empty cells are always at the bottom
}
);
} );
{/literal}
</script>
请注意,我在这里尝试了所有选项:http://mottie.github.io/tablesorter/docs/example-option-sort-empty.html
当我删除自定义解析器(并让Tablesorter找出解析器)时,它会按预期将空单元格排序到底部,但显然列未正确排序。
任何人都知道这里发生了什么?
答案 0 :(得分:1)
你需要稍微调整解析器。
is
函数,因为您可以将解析器设置为列而不需要自动检测它。正如@karlingen指出的那样,当单元格为空时,您仍然返回已设置为null的timestamp
;它被保存为null而不是空字符串。
$.tablesorter.addParser({
id: "datetime",
is: function (s) {
// no need to auto-detect
return false;
},
format: function (s) {
var date, timestamp,
arr = s.split(/[\s\-:]/);
if (arr[0] !== "") {
// Month is zero-indexed so subtract one from the month inside the constructor
date = new Date(Date.UTC('20' + arr[2], arr[1] - 1, arr[0], arr[3], arr[4])); // Y M D H M
timestamp = date.getTime();
}
// is date really a date?
return date instanceof Date && isFinite(date) ? timestamp : s;
},
type: "numeric"
});