使用javascript或jquery以dd.mm.yyyy格式包含日期的排序表

时间:2016-06-03 07:37:42

标签: javascript jquery sorting date

我已经编写了如下排序功能,

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可以是表格单元格中的值之一。 排序代码不适用于此特定格式,否则其工作正常。

如何对包含此特定格式的值的列进行排序。

1 个答案:

答案 0 :(得分:0)

<强>前体:

我将首先评论你的代码,这样我们都知道发生了什么。实际排序发生在呼叫中:

sort()

a函数将比较器函数作为参数;这是一个带有两个参数b0的函数,如果它们相等则返回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);
  });
}