使用javascript对表进行排序时为什么会丢失值

时间:2012-04-02 06:19:59

标签: javascript sorting

我正在尝试使用JavaScript对表进行排序。

function test() {
    var table = document.getElementById("myTable");

    var allRow = table.getElementsByTagName('tr');

    var ar = new Array();
    for(var i = 1; i < allRow.length; i++) {
        ar[i - 1] = allRow[i];
    }

    //sort the data according to number
    ar.sort(function(l, r) {
        var num1 = parseInt(l.childNodes[1].innerHTML);
        var num2 = parseInt(r.childNodes[1].innerHTML);
        return (num1 > num2) ? 1 : ((num1 < num2) ? -1 : 0);
    });
    //assigning the sorted data in the table
    for(var i = 0; i < ar.length; i++) {
        allRow[i + 1].innerHTML = ar[i].innerHTML;
    }
}

但是当我试图在表格中分配排序数据时它不会。但是,如果我将ar数据保留在一个新数组中,然后在allRow中分配它。我完全是新手。那么有人可以告诉我为什么会这样吗?

var tmp = new Array();
for(var i = 0 ; i<ar.length ; i++){
    tmp[i] = ar[i].innerHTML;
}

for(var i = 0; i < ar.length; i++) {
    allRow[i + 1].innerHTML = tmp[i];
}

2 个答案:

答案 0 :(得分:0)

将元素复制到ar数组时,如果没有复制元素,则只复制对元素的引用。 ar数组不包含与allRow数组具有相同内容的元素,它包含相同的元素。

当您更改allRow数组中元素的内容时,它也会在ar数组中更改,因为它是相同的元素。

对数组进行排序后,请从所有行中读取innerHTML,然后将其写回:

for(var i = 0; i < ar.length; i++) {
  ar[i] = ar[i].innerHTML;
}
for(var i = 0; i < ar.length; i++) {
  allRow[i + 1].innerHTML = ar[i];
}

答案 1 :(得分:0)

为什么你用自己的方法覆盖排序函数。当排序给出排序任何类型数据的功能,如数字,字母等...

让它像这样简单

function test() {

        var table = document.getElementById("myTable");
        var allRow = table.getElementsByTagName('tr');            
        var ar = new Array();

        for(var i = 1; i <= allRow.length; i++) {               
             ar[i-1]=table.rows[i-1].cells[0].innerHTML;                
        }           
        ar.sort();
        //assigning the sorted data in the table
        for(var i = 1; i <= allRow.length; i++) {               
             table.rows[i-1].cells[0].innerHTML=ar[i-1];

        }

   }