我有一段代碼用於對HTML表中的列進行排序,它的工作原理非常完美......除了日期字段。字母和純數字它很好用!但是在日期列上使用時,分揀機不能按我的要求工作。目前日期排序得到像這樣:沒有插件的JavaScript排序日期
2016年1月2日
2016年2月1日
二○一四年十二月一十二日
2015年12月14日
我想要發生的事情是:
2014年12月12日
2015年12月14日
2016年1月2日
2016年2月1日
這裏是JavaScript,我使用,使這種目前的工作:
var tb, asc1 = 1,
asc2 = 1,
asc3 = 1,
asc4 = 1,
asc5 = 1,
asc6 = 1;
function sort_table(tbody, col, asc) {
var rows = tbody.rows,
rlen = rows.length,
arr = new Array(),
i, j, cells, clen;
// fill the array with values from the table
for (i = 0; i < rlen; i++) {
cells = rows[i].cells;
clen = cells.length;
arr[i] = new Array();
for (j = 0; j < clen; j++) {
arr[i][j] = cells[j].innerHTML;
}
}
// sort the array by the specified column number (col) and order (asc)
arr.sort(function (a, b) {
return (a[col] == b[col]) ? 0 : ((a[col] > b[col]) ? asc : -1 * asc);
});
// replace existing rows with new rows created from the sorted array
for (i = 0; i < rlen; i++) {
rows[i].innerHTML = "<td>" + arr[i].join("</td><td>") + "</td>";
}
}
的onclick功能是這樣的:
function test() {
sort_table(tb, 0, asc1); asc1 *= -1; asc2 = 1; asc3 = 1; asc4 = 1; asc5 = 1; asc6 = 1;
};
有沒有人有任何建議我可以做到這一點!我對Javascript真的很陌生,每天仍在學習!日期格式爲mm-dd-yyyy,如果您無法從我的示例中知道。任何幫助將不勝感激!
UPDATE
我所採用丹尼爾·阿爾梅達代碼,因爲他有它在示例工作正是我想要它,但我無法將自己的代碼中包含它。當我這樣做的時候,似乎是不穩定的,到處都是。我現在用下面的代碼工作:
var sorter = function(id, column, order, isDate) {
var t = document.getElementById(id);
var rows = Array.prototype.slice.call(t.rows, 0);
rows = rows.sort(function(a, b) {
var dtA = (isDate) ? new Date(a.cells[column].innerHTML) : a.cells[column].innerHTML;
var dtB = (isDate) ? new Date(b.cells[column].innerHTML) : b.cells[column].innerHTML;
return (order == 0) ? dtA > dtB : dtA < dtB;
});
for (i = 0; i < rows.length; i++) {
t.appendChild(rows[i]);
}
}
我還創建了一個的jsfiddle但我不能得到的jsfiddle做任何事情。擔心我錯過了一些我不知道的東西。這裏是jsfiddle。
拆分兩個表的原因是底部表是動態加載的,當有100個返回記錄時,容器div允許使用滾動窗口而不是長長的信息列表。
商店的實際日期的對象和排序的,而不是排序的字符串。只需要將日期對象轉換爲需要顯示的字符串。 – forgivenson