当所有要排序的数据都相等时,我在 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
当我对名称部分进行排序时,我想要的是什么都不会发生,因为名称是相等的,但是当涉及到反向方法时,它只会反转给定的数据。 我在这里错过了什么吗? 提前谢谢你....
最佳答案
因此,您想要的是按第 2 列排序,如果值相等,则也按第 3 列排序。对吧?
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 中查看此演示:http://jsbin.com/welcome/39336/edit
关于Javascript 反向排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13068878/