如下代码
var t=document.getElementById("t");
var obj=eval("("+xmlhttp.responseText+")");
for(var i=0;i<obj.length;i++){
var r=document.createElement("tr");
if(obj[i][0]!=obj[i-1][0]||i==0){ //越界处
var l=1;
while(obj[i+l][0]==obj[i][0]){ //越界处
l++;
}
for(var k=0;k<2;k++){
var h=document.createElement("td");
h.rowSpan=l;
h.innerHTML=obj[i][k];
r.appendChild(h);
}
}
for(var j=2;j<5;j++){
var d=document.createElement("td");
d.innerHTML=obj[i][j];
r.appendChild(d);
}
t.children[0].appendChild(r);
}
目的是动态生成tr td,实现部分列的rowSpan,思路就是第一行必生成rowSpan列,其他行向后比较,不重复的就生成rowSpan列,至于rowSpan的行数用while循环向后探测。
IE,chrome发现警告
IE:'0'为空或不是对象。
chrome:Uncaught TypeError: Cannot read property '0' of undefined
发现是向前向后比较时,第一行最后一行会发生数组越界的问题,如上述代码中的越界标记。
于是越界部分修改为
......
if(obj[i-1]&&obj[i][0]!=obj[i-1][0]||i==0){
......
while(obj[i+l]&&obj[i+l][0]==obj[i][0]){
......
对向前向后的数组再多加一次逻辑判断即可。