本帖最后由 breeze 于 2013-5-30 16:58 编辑
我写了一个邮件列表, 想按照日期排序, 但是在排序方法内部使用cloneNode方法交换两个日期, 程序会将邮件列表中偶数的行删除, 但是单独封装一个swap方法, 就不会出现这种错误, 请高手看看下面的代码, 指点一下
//按照日期排序
function sort(){
var tbody = document.getElementsByTagName("tbody")[0];
var rowArr = tbody.rows;
for (var x = 0; x < rowArr.length - 1; x++) {
for (var y = 0; y < rowArr.length - 1 - x; y++) {
if (compare(rowArr[y], rowArr[y + 1])) {
// rowArr[y].swapNode(rowArr[y + 1]); //火狐不支持
//下面三行代码排序后列表行数会减少, 但是单独抽取一个方法就会正确
var clone = rowArr[y].cloneNode(true);
tbody.replaceChild(clone, rowArr[y + 1]);
tbody.replaceChild(rowArr[y + 1], rowArr[y]);
//swap(rowArr[y], rowArr[y + 1]);
}
}
}
formatColor();
}
//交换节点的方法
function swap(node1, node2){
var clone = node1.cloneNode(true);
node2.parentNode.replaceChild(clone, node2);
node1.parentNode.replaceChild(node2, node1);
}
//比较日期大小的方法
function compare(tr1, tr2){
var arr1 = tr1.cells[2].innerHTML.split("-");
var arr2 = tr2.cells[2].innerHTML.split("-");
var date1 = new Date(arr1[0], arr1[1], arr1[2]);
var date2 = new Date(arr2[0], arr2[1], arr2[2]);
alert(date1 + " " + date2);
return date1 > date2;
} |