我已经编写了如下排序功能,
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);
});
for(i = 0; i < rlen; i++){
arr[i] = "<td>"+arr[i].join("</td><td>")+"</td>";
}
tbody.innerHTML = "<tr>"+arr.join("</tr><tr>")+"</tr>";
}
并且下面给出的调用调用函数
sort_table(tb, 0, -1);
其中
tb = $($('th')[0]).parent().parent().parent().find('tbody')[0];
但我的表格包含格式为列的日期值 DD.MM.YYYY
例如,30.01.1993可以是表格单元格中的值之一。 排序代码不适用于此特定格式,否则其工作正常。
如何对包含此特定格式的值的列进行排序。
答案 0 :(得分:0)
<强>前体:强>
我将首先评论你的代码,这样我们都知道发生了什么。实际排序发生在呼叫中:
sort()
a
函数将比较器函数作为参数;这是一个带有两个参数b
和0
的函数,如果它们相等则返回a<b
,如果是b>a
则返回负数,如果是{{则返回正数1}}。
要对具有奇怪或非标准比较的类型进行排序,您只需要重写比较器!
<强>答案:强>
因此,您可能希望用以下内容替换上面的部分(请注意,这假设您的日期列单元格具有额外的date
html属性,以区别于任意字符串):
if(rows[0].cells[col].hasAttribute('date')) {
arr.sort(function(a, b){
var regex = /(\d+)\.(\d+)\.(\d+)/;
//strip out the days (1), months (2), and years (3)
var matchA = regex.exec(a[col]);
var matchB = regex.exec(b[col]);
//build strings of the form yyyymmdd
matchA = matchA[3]+matchA[2]+matchA[1];
matchB = matchB[3]+matchB[2]+matchB[1];
return (matchA == matchB) ? 0 : ((matchA > matchB) ? asc : -1*asc);
});
} else {
arr.sort(function(a, b){
return (a[col] == b[col]) ? 0 : ((a[col] > b[col]) ? asc : -1*asc);
});
}