1

当所有要排序的数据都相等时,我在 javascript 反向方法上遇到问题。

这是我的代码:

var ascAgt = false;
        function sortTableAgt() {
            var tbl = document.getElementById("mytable").tBodies[0];
            var store = [];
            for (var i = 0, len = tbl.rows.length; i < len; i++) {
                var row = tbl.rows[i];
                var rowdatedata = row.cells[1].innerHTML;
                store.push([rowdatedata, row]);
            }
            if (ascAgt) {
                store.sort();
                ascAgt = false;
            } else {
                store.sort();
                store.reverse();
                ascAgt = true;
            }
            for (var i = 0, len = store.length; i < len; i++) {
                var idno = i + 1;
                store[i][1].cells[0].innerHTML = idno.toString();
                tbl.appendChild(store[i][1]);
            } store = null;
        }

样本数据:

ID  Name    Date
1   XXXXX   2012/10/05
2   XXXXX   2012/03/16
3   XXXXX   2012/05/18
4   XXXXX   2012/05/18

当我对名称部分进行排序时,我想要的是什么都不会发生,因为名称是相等的,但是当涉及到 reverse 方法时,它只会反转给定的数据。我在这里错过了什么吗?先感谢您....

4

1 回答 1

2

所以,你想要的是按第二列排序,如果值相等,也按第三列排序。正确的?

sort()函数还需要一个回调。你必须使用它。

var ascAgt = false;

function sortTableAgt() {
  var table = document.getElementById("mytable").tBodies[0],
      rows = table.rows,
      len = rows.length,
      i = 0,
      store = [],
      order = ascAgt ? 1 : -1;

  for (i = 0; i < len; i++) {
    store.push(rows[i]);
  }

  store.sort(function(a, b) {
    if (a.cells[1].innerHTML == b.cells[1].innerHTML) {

      // If 2nd cell are equal, sort by 3rd cell
      // Compare them as date (timestamp)
      var dateA = new Date(a.cells[2].innerHTML).getTime(),
          dateB = new Date(b.cells[2].innerHTML).getTime();

      if (dateA == dateB) {
        return 0;
      } else if (dateA < dateB) {
        return -1 * order;
      } else {
        return 1 * order;
      }

    } else if (a.cells[1].innerHTML < b.cells[1].innerHTML) {
      return -1 * order;
    } else {
      return 1 * order;
    }
  });

  for (i = 0; i < len; i++) {
    store[i].cells[0].innerHTML = (i+1).toString();
    table.appendChild(store[i]);
  }
}

您还可以在 JSBin 中查看 tis 演示:http: //jsbin.com/welcome/39336/edit

于 2012-10-25T14:41:09.100 回答