【发布时间】:2015-04-06 13:01:14
【问题描述】:
这里我有一个使用 rcm.create() 方法创建的初始表。然后我必须创建另一个表,其中的行将根据第一个表中行的降序总和进行排序。这意味着行总和较高的将首先放在第二个表中。为了创建第二个表,我有 rcm.generateTab2() 方法。它的工作原理如下;
1.调用rcm.create()方法创建第二张表。
2.从第一个表中创建每行的总和并将其推入包含对象数组的等级数组中。
3.rank数组按降序排列
现在排名数组包含三个元素的对象。
每行的第一个 td 值。
总行数
以及将用于在第二个表的 tbody 中插入行的完整行
4.tbody 元素从第二个表被删除。
5.然后创建一个新的并尝试将排序的行从表 1 插入到表 2。
但我得到的只是表 2 在浏览器中被推到表 1 上方并且没有插入任何行。
完整代码:jsfiddle
主要问题在 rcm.generateTab2 方法内部。所以我在这里单独发布它。
rcm.generateTab2 方法:
generateTab2:function(){
var power=0;
this.create(machine,process); //create the second table
var tbody=document.getElementsByTagName('tbody')[0];
var trow=tbody.getElementsByTagName('tr');
for(i=0;i<trow.length;i++){ //get summation
var td=trow[i].getElementsByTagName('td');
var sum=0;
for(j=td.length-1;j>0;j--){
if(td[j].innerHTML==''){
sum+=0*Math.pow(2,power);
}else{
sum+=parseInt(td[j].innerHTML)*Math.pow(2,power);
}
power++;
}
var first=parseInt(td[0].innerHTML);
rank.push({rowNo:first,sum:sum,row:trow[i]}); //pushed to rank array
power=0;
}
rank.sort(function (a,b){ //rank array is sorted
if(a.sum>b.sum){
return -1;
}else if(a.sum<b.sum){
return 1;
}else{
return 0;
}
});
console.log(rank);
var parent=document.getElementsByTagName('table')[1];
parent.removeChild(parent.childNodes[1]);//delete existing tbody from second table
var newTbody=document.createElement('tbody'); //create a new tbody
parent.appendChild(newTbody); //append it to second table
for(i=0;i<rank.length;i++){
newTbody.appendChild(rank[i].row); //insert rows to tbody of second table
}
}
【问题讨论】:
标签: javascript html css arrays sorting