zoukankan      html  css  js  c++  java
  • 根据数据渲染表格、用数组的方式保存表格字符串(有行合并的) 张的表格倒序进行构建 固定表头 康和盛报表

    传统的做法 就是后台将数据排序一下,将有重复的数据放在一起,然后再遍历数据源

    定好一个变量存放需要合并的依据(字段)  例如name  每一次遍历完就给name进行赋值  rows    渲染表格  一行一行的渲染

    name   和  rowspan (记录合并的行数)

    遍历 如果当前的字段不等于name的时候   

      将rowspan=1   正常遍历  正常拼接str  

    如果等于 name  这个时候就需要合并了  

       首先将 rowspan++    然后找到  表格的合并的第一行  样属性rowspan的值设置为相加后的rowspan

    代码:(19年12月12号 和张帆一起在刘工电脑上修改

    function initTable(rowData) {
        var rowspan = 1,
            _name = "",
            str = "",
            trIndex = 0,
            index_add = 0;;
        for (var i = 0; i < rowData.length; i++) {
            var data = rowData[i];
            if (data.temp3 == 1) {
                if (data.name == _name) {//需要合并的情况
                    //将上一个的tr的rowspan重新赋值
                    rowspan++;//处理行合并用
                    index_add++;//序号
                    $("#tby .h-tbl tr:eq(-" + (rowspan - 1) + ") td:eq(1)").attr("rowspan", rowspan); //位置列合并
                    $("#tby .h-tbl tr:eq(-" + (rowspan - 1) + ") td:last").attr("rowspan", rowspan); //签名列合并
                    str = "<tr>" +
                        "<td style='5%'>" + index_add + "</td>" +
                        "<td style='6%'>" + data.name + "</td>" +
                        "<td style='17%'>" + data.devCode + "</td>" +
                        "<td style='11%'>" + data.lastData + "</td>" +
                        "<td style='11%'>" + data.nowData + "</td>" +
                        "<td style='11%'>" + data.e + "</td>" +
                        "<td style='16.9%'>" + subVal(data.nowData, data.lastData, data.e) + "</td>"
                    "</tr>";
                } else {
                    rowspan = 1;
                    index_add++;//序号
                    str = "<tr>" +
                        "<td style='5%'>" + index_add + "</td>" +
                        "<td style='6%' rowspan=" + rowspan + ">" + data.site + "</td>" +
                        "<td style='17%'>" + data.name + "</td>" +
                        "<td style='11%'>" + data.devCode + "</td>" +
                        "<td style='11%'>" + data.lastData + "</td>" +
                        "<td style='11%'>" + data.nowData + "</td>" +
                        "<td style='11%'>" + data.e + "</td>" +
                        "<td style='11%'>" + subVal(data.nowData, data.lastData, data.e) + "</td>" +
                        "<td style='16.9%' rowspan=" + rowspan + "></td>"
                    "</tr>";
                }
                _name = data.name;
                $("#tby .h-tbl").append(str);
            }
        }
        //setSlimScroll();
    }

    这种方法可以实现,但是通用性不是很好,渲染的效果也不是很好,因为表格是一行一行的进行渲染的,影响性能

    解决办法:

    可以将拼接好的数据一行一行的先放到一个数组中,然后统一用join转成字符串  直接一次性渲染,也方便查找索引  回头来修改  dom的rowspan

    代码:

                    function initTable(rowData) {
                        var rowspan = 1,
                            _name = "",
                            str = ["<colgroup>" + $("#thd").find('colgroup').html() + "</colgroup>"], //固定表头用
                            trIndex = 0,
                            index_add = 0;
                        for (var i = 0; i < rowData.length; i++) {
                            var data = rowData[i];
                            var lastData = "";
                            var nowData = "";
                            var e = "";
                            if (data.lastData == undefined) {
                                lastData = "";
                                e = "";
                            } else {
                                lastData = data.lastData;
                                e = data.e;
                            }
                            if (data.nowData == undefined) {
                                nowData = "";
                                e = "";
                            } else {
                                nowData = data.nowData;
                                e = data.e;
                            }
                            var data_use = subVal(data.nowData, data.lastData, data.e);
                            var money_use = calMoney(data_use, money);
                            var data_f = calMoney(data.readEncode_f, data.e);
                            var data_p = calMoney(data.readEncode_p, data.e);
                            var data_g = calMoney(data.readEncode_g, data.e);
                            if (data.class2 == _name) {
                                rowspan++;
                                //$("#tby .h-tbl tr:eq(-"+(rowspan-1)+") td:eq(1)").attr("rowspan",rowspan);//位置合并
                                var idxx = (str.length - 1) - (rowspan - 2) //根据规律 找到需要添加rowspan索引  
                                    //将上一个的tr的rowspan重新赋值
                                str[idxx] = $(str[idxx]).find("td:lt(2)").attr("rowspan", rowspan).parent()[0].outerHTML; //将rowspan设置回数组中(第一列和第二列)
                                //index_add++;
                                var _temp = "<tr>" +
                                    //"<td >"+index_add+"</td>"+
                                    "<td >" + data.name + "</td>" +
                                    "<td >" + data.devCode + "</td>" +
                                    "<td >" + (data.e * 1).toFixed(0) + "</td>" +
                                    "<td >" + data_f + "</td>" +
                                    "<td >" + (data.price_f * 1).toFixed(2) + "</td>" +
                                    "<td >" + calMoney(data_f, data.price_f) + "</td>" +
                                    "<td >" + data_p + "</td>" +
                                    "<td >" + (data.price_p * 1).toFixed(2) + "</td>" +
                                    "<td >" + calMoney(data_p, data.price_p) + "</td>" +
                                    "<td >" + data_g + "</td>" +
                                    "<td >" + (data.price_g * 1).toFixed(2) + "</td>" +
                                    "<td >" + calMoney(data_g, data.price_g) + "</td>" +
                                    "<td >" + lastData + "</td>" +
                                    "<td >" + nowData + "</td>" +
                                    "<td >" + data_use + "</td>" +
                                    "</tr>";
                                str.push(_temp)
                            } else {
                                rowspan = 1;
                                index_add++;
                                str.push("<tr>" +
                                    "<td rowspan=" + rowspan + ">" + index_add + "</td>" +
                                    "<td rowspan=" + rowspan + ">" + data.class2 + "</td>" +
                                    "<td >" + data.name + "</td>" +
                                    "<td >" + data.devCode + "</td>" +
                                    "<td >" + (data.e * 1).toFixed(0) + "</td>" +
                                    "<td >" + data_f + "</td>" +
                                    "<td >" + (data.price_f * 1).toFixed(2) + "</td>" +
                                    "<td >" + calMoney(data_f, data.price_f) + "</td>" +
                                    "<td >" + data_p + "</td>" +
                                    "<td >" + (data.price_p * 1).toFixed(2) + "</td>" +
                                    "<td >" + calMoney(data_p, data.price_p) + "</td>" +
                                    "<td >" + data_g + "</td>" +
                                    "<td >" + (data.price_g * 1).toFixed(2) + "</td>" +
                                    "<td >" + calMoney(data_g, data.price_g) + "</td>" +
                                    "<td >" + lastData + "</td>" +
                                    "<td >" + nowData + "</td>" +
                                    "<td >" + data_use + "</td>" +
                                    "</tr>");
                            }
                            _name = data.class2;
                            //}
                        }
                        console.log(str)
                        $("#tby .h-tbl").append(str.join(""));
                        var headDom = $(".h-tbl")[0].outerHTML;
                        var bodyDom = $(".h-tbl")[1].outerHTML;
                        $("#flexHead").html(headDom); //渲染固定表头
                        getWHStyle(); //计算固定表头的宽度
                        $("#flexBody").html(bodyDom);
                    }
    
                    function getWHStyle() {
                        var height = $("#tby").height() - 17;
                        var flexWidth = 0;
                        $("#thd").find('col').each(function(i, el) {
                            var strWidth = this.attributes.style.nodeValue;
                            if (i < 2) {
                                flexWidth += strWidth.slice(strWidth.indexOf(":") + 1, strWidth.indexOf("p")) * 1; //计算固定表头宽度
                            }
                        })
                        flexWidth += 2; //border宽度
                        $("#flexHead").css("width", flexWidth);
                        $("#flexBody").css("height", height).css("width", flexWidth);
                    }

    1、张的表格根据数据有行合并的

    <!doctype html>
    <html lang="en">
     <head>
      <meta charset="UTF-8">
      <meta name="Generator" content="EditPlus®">
      <meta name="Author" content="">
      <meta name="Keywords" content="">
      <meta name="Description" content="">
      <title>Document</title>
      <style type="text/css">
        #tbl{border-collapse:collapse;100%;height:500px}
        #tbl td,#tbl th{border:1px solid #ddd}
      </style>
     </head>
     <body>
        <table id="tbl"></table>
        <script type="text/javascript" src="js/jquery-1.11.3.js"></script>
        <script type="text/javascript">
            var dataObj=[
                {sname:'111',date:1,oilData:321,oilPdata:12,oilDifference:'12'},
                {sname:'222',date:1,oilData:321,oilPdata:12,oilDifference:'12'},
                {sname:'222',date:1,oilData:321,oilPdata:12,oilDifference:'12'},
                {sname:'222',date:1,oilData:321,oilPdata:12,oilDifference:'12'},
                {sname:'444',date:1,oilData:321,oilPdata:12,oilDifference:'12'}
                
            ]
            var str="",hstr="",bstr="";
            //清空内容
            $("#tbl").html("");
            hstr="<thead><tr class='yel'><th>设备名称</th><th>日期</th><th>加油量</th><th>用油量</th><th>差值</th>",ulList="<li>设备名称</li><li>日期</li><li>加油量</li><li>用油量</li><li>差值</li>";
            bstr="<tbody>";
            var arry=new Array();
            var oldName='';
            for(var j=0;j<dataObj.length;j++){
                if(dataObj[j].sname!==oldName){
                    arry[j]=
                    "<tr>"+
                        "<td rowspan='1'>"+dataObj[j].sname+"</td>"+
                        "<td>"+dataObj[j].date+"</td>"+
                        "<td>"+dataObj[j].oilData+"</td>" +
                        "<td>"+dataObj[j].oilPdata+"</td>"+
                        "<td>"+dataObj[j].oilDifference+"</td>"+
                    "</tr>";
                }else{
                    arry[j]=
                    "<tr>"+
                        "<td>"+dataObj[j].date+"</td>"+
                        "<td>"+dataObj[j].oilData+"</td>" +
                        "<td>"+dataObj[j].oilPdata+"</td>"+
                        "<td>"+dataObj[j].oilDifference+"</td>"+
                    "</tr>";
                    var j_index=j-1;
                    while(arry[j_index].indexOf('rowspan')==-1&&j_index>=0){
                        j_index--;
                    }
                    if(j_index>=0){
                        var nums=arry[j_index].split("rowspan='");
                        var n=parseFloat(nums[1]);
                        if(isNaN(n)||!n){n=1}
                        nums[1]=nums[1].replace(n,++n)
                        arry[j_index]=nums.join("rowspan='");
                    }
                }
                oldName=dataObj[j].sname;
            }
            console.log(arry);
            bstr+=arry.join('');
            bstr+="</tbody>";
            str=hstr+bstr;
            $('ul.th-fixed').html("");
            $('ul.th-fixed').html(ulList);
            $("#tbl").append(str);
            $('ul.th-fixed').each(function(index,ele){
                setUlWidth($(ele),true);
            });
        </script>
     </body>
    </html>
    View Code

    2、表格的导出的

    http://112.95.161.37:8090/EMS/main.jsp

    3、表格的倒序构建的

    数据:

    var data=[
        {name:'AA',value:2.3,id:'101',pid:'000'},
        {name:'BB',value:2.3,id:'102',pid:'000'},
        {name:'CC',value:2.3,id:'101101',pid:'101'},
        {name:'DD',value:2.3,id:'101102',pid:'101'},
        {name:'EE',value:2.3,id:'101101101',pid:'101101'},
        {name:'FF',value:2.3,id:'101101102',pid:'101101'},
        {name:'GG',value:2.3,id:'101102101',pid:'101102'},
        {name:'HH',value:2.3,id:'101102102',pid:'101102'},
        {name:'II',value:2.3,id:'102101',pid:'102'},
        {name:'JJ',value:2.3,id:'102101101',pid:'102101'},
        {name:'KK',value:2.3,id:'102101102',pid:'102101'},
        {name:'MM',value:2.3,id:'102101103',pid:'102101'},
        {name:'NN',value:2.3,id:'102101104',pid:'102101'},
        {name:'LL',value:2.3,id:'102101105',pid:'102101'},
    ];

     4.时间节点空隙,检验24小时中间缺的部分,提示

  • 相关阅读:
    转:【More Effective C#】Lambda表达式优化
    转:Highcharts图表控件的使用
    C# subString的理解
    转:TimeSpan的用法
    Android学习笔记一:Android基本组件和Activity生命周期
    IIS 反向代理设置
    WebApi 身份认证解决方案:Basic基础认证
    Calling async method synchronously
    C# 公共类
    aspnet-api-versioning
  • 原文地址:https://www.cnblogs.com/pengfei25/p/9670359.html
Copyright © 2011-2022 走看看