2012-04-02 91 views
0

我正在尝试使用JavaScript对表进行排序。为什么在使用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]; 
} 
+0

是否可以张贴上的jsfiddle的例子吗? – 2012-04-02 06:30:09

+0

sort函数可以返回'num1 - num2'。 – RobG 2012-04-02 07:04:48

回答

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]; 
} 
0

为什么你own.When乌尔覆盖排序功能排序排序给予任何形式的功能像数字数据,按照字母顺序的等等

使简单这样

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]; 

     } 

    } 
相关问题