为什么在使用javascript对表进行排序时会丢失值
我正在尝试使用JavaScript对表进行排序为什么在使用javascript对表进行排序时会丢失值,javascript,sorting,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]
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
数组时,您不是在复制元素,而是在复制对元素的引用。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];
}
for(变量i=0;i
为什么您要用自己的排序功能覆盖排序功能。当排序时,您可以对任何类型的数据(如数字、字母等)进行排序
就这么简单吧
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];
}
}
功能测试(){
var table=document.getElementById(“myTable”);
var allRow=table.getElementsByTagName('tr');
var ar=新数组();
对于(var i=1;我可以在JSFIDLE上发布一个示例吗?排序函数可以返回num1-num2
。
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];
}
}