我正在尝试使用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 :(得分: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];
}
}