我编写了一个非常小的轻量级自定义函数,它根据它的值对表进行排序。此功能可以很好地适用于所有列和缩放。
我遇到的问题是按日期订购。从数据库中检索的数据(不能更改)的格式为dd-mm-yyyy。显然,这是按第一个值排序,由于01-06-2016
不应该在09-01-2016
之前,因此不能提供所需的结果。
我可以编写一个单独的函数来执行各种日期转换和比较,但到目前为止,我的尝试变得非常臃肿。几乎变得比oringinal功能更大。有人可以建议一个干净的方法吗?
DEMO 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);
});
}
答案 0 :(得分:2)
您只需将日期字符串转换为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);
});
}
答案 1 :(得分:0)
如何将日期添加到html?如果您正在接收数据并且知道当前日期值,则可以轻松地重新格式化日期值,如:
var parts = origDate.split('-');
var newFormat = parts[2] + '-' + parts[1] + '-' + parts[0];
在添加到DOM之前。
答案 2 :(得分:0)
你可以约会&#39;日期&#39;类到特定th
然后在函数本身内以不同方式处理它们。在这个例子中,我只是通过检查类来检测它是否为日期值,然后反转这些值,使其显示为yyyy-mm-dd
https://jsfiddle.net/kplcode/2nvopbqo/1/
$(".sort").click(function() {
var col = $(this).parent().children().index($(this));
var desc = $(this).hasClass('desc');
var date = $(this).hasClass('date');
sortTable(desc, col, date);
$(this).toggleClass("desc asc");
});
function sortTable(order, col, date) {
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(date) {
var A = A.split("-").reverse().join('-');
var B = B.split("-").reverse().join('-');
}
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);
});
}