我遇到了这个代码来对JQuery中的表进行排序,它可以很好地排序字符串和数字,但日期被视为字符串,所以在排序4/4/2015
和12/12/2015
以及1/1/2015
时结果是:1/1/2015
,12/12/2015
,4/42015
。如何根据日期对其进行修改以正确排序?
$('th').click(function () {
var table = $(this).parents('table').eq(0);
var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()));
this.asc = !this.asc;
if (!this.asc) {
rows = rows.reverse();
$(this).find('a').html('▾');
} else {
$(this).find('a').html('▴');
}
for (var i = 0; i < rows.length; i++) {
table.append(rows[i]);
}
});
function comparer(index) {
return function (a, b) {
var valA = getCellValue(a, index), valB = getCellValue(b, index);
return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB);
}
}
function getCellValue(row, index) { return $(row).children('td').eq(index).html(); }
答案 0 :(得分:1)
我接受了@ epascarello的建议并将其更改为Date Object
,如下所示:
$('th').click(function () {
var table = $(this).parents('table').eq(0);
var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()));
this.asc = !this.asc;
if (!this.asc) {
rows = rows.reverse();
$(this).find('a').html('▾');
} else {
$(this).find('a').html('▴');
}
for (var i = 0; i < rows.length; i++) {
table.append(rows[i]);
}
});
function comparer(index) {
return function (a, b) {
var valA;
var valB;
if (getCellValue(a, index).indexOf("/") > -1) //comparing dates
{
valA = new Date(getCellValue(a, index)).setHours(0, 0, 0, 0);
valB = new Date(getCellValue(b, index)).setHours(0, 0, 0, 0);
}
else {
valA = getCellValue(a, index);
valB = getCellValue(b, index);
}
return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.localeCompare(valB);
}
}
function getCellValue(row, index) { return $(row).children('td').eq(index).html(); }