我编写了一个非常小、轻量级的自定义函数,它根据表的值对表进行排序。此函数适用于所有列并且可以很好地缩放。
我遇到的问题是按日期排序。从数据库检索的数据(无法更改)的格式为 dd-mm-yyyy。显然,这是按第一个值排序,这不会给出所需的结果,因为 01-06-2016
不应早于 09-01-2016
。
我可以编写一个单独的函数来执行各种日期转换和比较,但到目前为止我的尝试已经变得非常臃肿。几乎变得比原来的功能更大。有人可以建议一种干净的方法吗?
演示 http://jsfiddle.net/6sskjbod/565/
function sortTable(order, col) {
var rows = $('#mytable tbody tr').get();
rows.sort(function(a, b) {
var A = $(a).children('td').eq(col).text().toUpperCase();
var B = $(b).children('td').eq(col).text().toUpperCase();
if (order) {
if (B < A) return -1;
if (B > A) return 1;
} else {
if (A < B) return -1;
if (A > B) return 1;
}
return 0;
});
$.each(rows, function(index, row) {
$('#mytable').children('tbody').append(row);
});
}
最佳答案
您只需将日期字符串转换为 ISO 格式 (YYYY-MM-DD
),然后即可将其转换为 Date
对象。
您的 jQuery sortTable 函数将如下所示:
function sortTable(order, col) {
var rows = $('#mytable tbody tr').get();
rows.sort(function(a, b) {
var A,B;
if(col==0)
{
valA = $(a).children('td').eq(col).text().split('-');
valB = $(b).children('td').eq(col).text().split('-');
A = new Date(valA[2]+"-"+valA[1]+"-"+valA[0]);
B = new Date(valB[2]+"-"+valB[1]+"-"+valB[0]);;
}
else
{
A = $(a).children('td').eq(col).text().toUpperCase();
B = $(b).children('td').eq(col).text().toUpperCase();
}
if (order) {
if (B < A) return -1;
if (B > A) return 1;
} else {
if (A < B) return -1;
if (A > B) return 1;
}
return 0;
});
$.each(rows, function(index, row) {
$('#mytable').children('tbody').append(row);
});
}
这是工作 fiddle http://jsfiddle.net/7jLvvp0n/2/
关于javascript - 实用地将日期字符串转换为 yyyy-mm-dd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39507521/