javascript实现多表头分类交叉报表:html表格

 
<! DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
< HTML >
< HEAD >
</ HEAD >

< BODY >

< div  id ="report" >

</ div >
< br >
< input  type ="button"  value ="create"  onclick ="create()" >

< script > ...
function create()
...{
    
var datas = [
    [
'基期1','分类1','指标1','上期','1'],
    [
'基期1','分类1','指标1','同期','2'],
    [
'基期1','分类1','指标2','上期','3'],
    [
'基期1','分类2','指标1','同期','4'],
    [
'基期1','分类1','指标3','上期','5'],
    [
'基期1','分类2','指标4','同期','6'],
    [
'基期1','分类2','指标4','上期','7'],
    [
'基期1','分类3','指标1','同期','8'],
    [
'基期1','分类3','指标2','上期','9'],
    [
'基期1','分类4','指标1','同期','10'],
    [
'基期2','分类1','指标2','上期','11'],
    [
'基期3','分类1','指标3','上期','12'],
    [
'基期4','分类2','指标1','上期','13'],
    [
'基期4','分类1','指标2','同期','14'],
    [
'基期4','分类2','指标1','同期','15'],
    [
'基期4','分类2','指标1','本季','16'],
    [
'基期4','分类2','指标2','上期','17'],
    [
'基期4','分类1','指标1','上期','18']
    ];
    
    
var row = 0;
    
var col = 0;
    
var col1s = [];
    
    
var count = datas.length;
    
    
var pos = new Array(count); 
    
var rowName = [];
    
//debugger;
    
    
for(i = 0; i < count ; i++)
    
...{
        
var data = datas[i];
            
        pos[i] 
= new Object();
        pos[i].row 
= -1;
        pos[i].col 
= -1;
        
        pos[i].value 
= data[4];
        
        
for(j = 0 ; j < rowName.length; j ++)
        
...{
            
if(rowName[j] == data[0])
            
...{
                pos[i].row 
= j;
                
break;
            }

        }

        
        
if(pos[i].row == -1)
        
...{
            pos[i].row 
= rowName.length;
            rowName.push(data[
0]);
        }

        
        
var col1 = '';
        
var col2 = '';
        
var col3 = '';
        
        
for(j = 0 ; j < col1s.length; j ++)
        
...{
            
if(col1s[j].name == data[1])
            
...{
                col1 
= col1s[j];
                
break;
            }

        }

        
        
if(col1 == '')
        
...{
            col1 
= new Object();
            col1.name 
= data[1];
            col1.col2s 
= [];
            
            col1.col 
= 0;
            col1s.push(col1);
        }

        
        
        
        
for(j = 0 ; j < col1.col2s.length; j ++)
        
...{
            
if(col1.col2s[j].name == data[2])
            
...{
                col2 
= col1.col2s[j];
                
break;
            }

        }

        
        
if(col2 == '')
        
...{
            col2 
= new Object();
            col2.name 
= data[2];
            col2.col3s 
= [];
            
            col1.col2s.push(col2);
        }

        
        
        
for(j = 0 ; j < col2.col3s.length; j ++)
        
...{
            
if(col2.col3s[j].name == data[3])
            
...{
                col3 
= col2.col3s[j];
                col3.index.push(i);
                
break;
            }

        }

        
        
if(col3 == '')
        
...{
            col3 
= new Object();
            col3.name 
= data[3];
            col3.index 
= []; 
            col3.index.push(i);
            
            col2.col3s.push(col3);
            
            col 
++;
            col1.col 
++;
        }
    
        
    }


    
//col1s[0].
    //alert(col);
    //alert(col1s[0].col);
    
    
var tr = '<tr><td>' + ' &nbsp;' + '</td>';
    
var tr2 = '<tr><td>' + ' &nbsp;' + '</td>';
    
var tr3 = '<tr><td>' + ' &nbsp;' + '</td>';
    
    
var ind = 0;
    
    
for(j = 0 ; j < col1s.length; j ++)
    
...{
        tr 
+= '<td align="center" colspan="' + col1s[j].col + '">' + col1s[j].name + '</td>' ;
        
for(i = 0 ; i < col1s[j].col2s.length; i ++)
        
...{
            tr2 
+= '<td align="center" colspan="' + col1s[j].col2s[i].col3s.length + '">' + col1s[j].col2s[i].name + '</td>' ;
            
for(k = 0 ; k < col1s[j].col2s[i].col3s.length; k ++)
            
...{
                
var node = col1s[j].col2s[i].col3s[k];
                tr3 
+= '<td  align="center">' + node.name + '</td>' ;
                
                
var indexs = node.index;
                
for(var l = 0; l < indexs.length; l ++)
                
...{
                    pos[indexs[l]].col 
= ind;
                }

                
                ind 
++;
            }

        }

    }

    
    tr2 
+= '</tr>';
    tr3 
+= '</tr>';
    
    tr 
+= '</tr>';
    
    tr 
+= tr2;
    tr 
+= tr3;
    

    
var erow = rowName.length;
    
    
for(k = 0; k < erow ; k ++)
    
...{
        tr 
+= '<tr><td>' + rowName[k] + '</td>';
        
for(j = 0 ; j < col; j ++)
        
...{
            tr 
+= '<td>' + ' &nbsp;' + '</td>' ;
        }

    tr 
+= '</tr>';
    }

    
    
    
    report.innerHTML 
= '<table id="rep" align="center" border=1>' + tr + '</table>';
    
    
    
for(i = 0; i < count ; i++)
    
...{
        
var r = pos[i].row + 3;
        
var c = pos[i].col + 1;
        
        rep.rows[r].cells[c].innerHTML 
= pos[i].value;
    }

    

}





</ script >

</ BODY >
</ HTML >

 

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kimmking

赠人玫瑰手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值