js动态生成一个相邻的单元格内容相同的则进行合并table表格

js动态生成一个相邻的单元格内容相同的则进行合并table表格

合并前效果
在这里插入图片描述
合并后效果:
在这里插入图片描述
js代码

/* 重现表格数据 */
    var dateDiff = null;
    var categoryName = null;
    var cdmCategoryId = null;
    var orderdata = null;
    var orderdataCount = null;
    var newOrder = null;
    var dutyDayList=[];
	function parseDutyForm(data,para) {
		var SDate = $("#dmdStartDate").datepicker("getValue");
		var EDate = $("#dmdEndTime").datepicker("getValue");
        categoryName = data.dcaCategoryName; //类别名称
        cdmCategoryId = data.cdmCategoryId; //类别id
        dateDiff = getDateDiff(SDate, EDate);//开始时间和结束时间之间相差的天数
        orderdata=(data.cdmOrderData ).split("?"); //修改时每天值班时间用?间隔
        console.log("orderdata="+orderdata);
        dutyDayList=data.dutyDayList;
        //第一行 类别名称
        var title = "<tr style='background-color:#337ab7;color:white;font-size:13px;font-weight: bold'><td rowspan='3' align='center' style='border: 2px solid #B3D0F4; padding:10px 20px 15px 20px; width:120px; height:30px; word-break: keep-all;white-space:nowrap;'> 日期</td><td rowspan='3' align='center' style='border: 2px solid #B3D0F4; padding:10px 20px 15px 20px; width:80px; height:30px;word-break: keep-all;white-space:nowrap;'>星期</td>"
        //岗位名称 行
        var jodTr="<tr style='background-color:#337ab7;color:white;font-size:13px;font-weight: bold'>";
        //班次名称 行
        var orderTr="<tr style='background-color:#337ab7;color:white;font-size:13px;font-weight: bold'>";
        var count=0;
        var tdPeopleCount=0;
        for(var t=0;t<orderdata.length;t++){
        	//需要渲染的集合数据(表格需要的数据)
            newOrder = orderdata[t].split(";");
            orderdataCount=newOrder.length;
            console.log("orderdata.length="+orderdata.length);
            console.log("newOrder="+newOrder);
            console.log("orderdataCount="+orderdataCount);
            if(count==0){
                var num = 0;
                //该数组是存储表格中colspan变量的数组
                var printJobArr =[];
                //表格中colspan的值
                var jonPos = 0;
                //调用该方法将集合newOrder中相同的内容转换为colspan的值保存到数组printJobArr中,newOrder先进行排序,将相同的元素放在一起,再调用下面的方法
                printJobNameArrPush(newOrder,jonPos,printJobArr);
                for(var i = 0; i< newOrder.length; i++){
                    var orderID = (newOrder[i].split("*")[0]).split("&")[0];
                    var orderName = (newOrder[i].split("*")[0]).split("&")[1];
                    var orderSTime = (newOrder[i].split("*")[0]).split("&")[2];
                    var orderETime = (newOrder[i].split("*")[0]).split("&")[3];
                    var jobId = ((newOrder[i].split("*")[1]).split("%")[0]).split("&")[0];
                    var jobName = ((newOrder[i].split("*")[1]).split("%")[0]).split("&")[1];
                    console.log("jobName="+jobName);
                    num ++;
                    if(num==1){
                    	//表头第一行需要合并的列数是已知的所以直接合并即可
                        title = title + "<td  id='" + cdmCategoryId + "' align='center' colspan='"+newOrder.length+"' style='border: 2px solid #B3D0F4; padding:10px 0px 15px 0px; width:"+newOrder.length+"*150px; height:30px; word-break: keep-all;white-space:nowrap;' >" + categoryName + "</td>";
                    }
                    //表头第二行就是用到上面的数组的数据进行合并的
                    var jobTd = printJobArr[i]==0?"":"<td colspan='"+printJobArr[i]+"' id='" + jobId + "' class='jobTd' align='center' style='border: 2px solid #B3D0F4; padding:10px 0px 15px 0px; width:150px; height:30px; word-break: keep-all;white-space:nowrap;'>" + jobName + "</td>"
                    jodTr = jodTr + jobTd;
              
                    orderTr = orderTr + <td colspan='"+printOrderArr[i]+"' id='" + orderID + "' align='center' style='border: 2px solid #B3D0F4; padding:10px 0px 15px 0px; width:150px; height:30px; word-break: keep-all;white-space:nowrap;' >" + orderName + "</td>";
                    count++;
                }
            }
        }
        title = title+ "</tr>";
        jodTr = jodTr+ "</tr>";
        orderTr = orderTr+ "</tr>";
        $("#dutyform").append(title);
        $("#dutyform").append(jodTr);
        $("#dutyform").append(orderTr);
        for(var m = 0; m< dutyDayList.length; m++) {
            var date = new Date(Date.parse(dutyDayList[m]));
            //var tDate = addDate("d",date,m);
            var aDate = formatterDate(date,"ymd");
            var week = getWeek(date);
            var item = "<tr>";
            item = item + "<td id='"+aDate+"' align='center'  style='font-size:15px;padding:10px 20px 15px 20px; width:80px; height:30px; font-weight: bold; border: 2px solid #B3D0F4; word-break: keep-all; white-space:nowrap;'>"+aDate+"</td><td id='"+aDate+"_"+m+"' align='center'  style='font-size:15px;padding:10px 20px 15px 20px; width:80px; height:30px; font-weight: bold; border: 2px solid #B3D0F4; word-break: keep-all; white-space:nowrap;'>"+week+"</td>";
            var tdPeople = "";
            for(var n = 0;n < newOrder.length; n++) {
                var jobId = ((newOrder[n].split("*")[1]).split("%")[0]).split("&")[0];
                var jobName = ((newOrder[n].split("*")[1]).split("%")[0]).split("&")[1];
                tdPeople = tdPeople + "<td id='p"+jobId+"_"+m+"_"+n+"' align='center' style='width:80px; height:30px; border: 2px solid #B3D0F4; word-break: keep-all; white-space:nowrap;' οndrοp='drop(this)' οndragοver='allowDrop(event)' onClick='checkList(this)'><ul id='" +jobId+ "_" +n+ "' class='dutyTd'></ul></td>"
            }
            item = item + tdPeople;
            item = item + "</tr>";
            $("#dutyform").append(item);
        }
        //上面是表格拼接  下面是数据填充
        for(var t=0;t<orderdata.length;t++){
            var newOrder = orderdata[t].split(";");
            for(var i = 0; i< newOrder.length; i++){
                var orderID = (newOrder[i].split("*")[0]).split("&")[0];
                var orderName = (newOrder[i].split("*")[0]).split("&")[1];
                var orderSTime = (newOrder[i].split("*")[0]).split("&")[2];
                var orderETime = (newOrder[i].split("*")[0]).split("&")[3];
                var jobId = ((newOrder[i].split("*")[1]).split("%")[0]).split("&")[0];
                var jobName = ((newOrder[i].split("*")[1]).split("%")[0]).split("&")[1];
                var data=newOrder[i];
                var dutyPoliceData = (newOrder[i].split("%")[1]).split("@");
                console.log("data="+data);
                console.log("dutyPoliceData="+dutyPoliceData);
                if(dutyPoliceData[0].split("/")[0].indexOf(",") != -1) {//存在逗号间隔 及需要切割成数组
                    var policeIds = (dutyPoliceData[0].split("/")[0]).split(",");  //policeId
                    var policeName = (dutyPoliceData[0].split("/")[1]).split(",");
                    for(var l = 0; l < policeIds.length; l++) {
                        var li = "<li id='id_p"+jobId+"_"+l+"-"+policeIds[l]+"' style='font-size:13px;margin:8px'>"
                            +policeName[l]+ "<input class='hTd' readonly='true' type='hidden' value='"+policeName[l]+"'/><a href='javascript:void(0);' id='p"+jobId+"_"+l+"-"+policeIds[l]+"' style='color:red;font-weight: bold' onClick='deleteSelPolice(this)'></a></li>"
                        $("#p" +jobId+ "_" +t+"_"+i+ " ul").append(li);
                    }
                } else {//不存在逗号间隔 不需要切割成数组  及一个元素
                    var policeIds = dutyPoliceData[0].split("/")[0];  //policeId
                    var policeName = dutyPoliceData[0].split("/")[1];
                    var li = "<li id ='id_p" +jobId+ "_" +"o"+ "-" +policeIds+ "' style='font-size:13px;margin:8px'>"
                        +policeName+ "<input class='hTd' readonly='true' type='hidden' value='" +policeName+ "'/><a href='javascript:void(0);' id='p" +jobId+ "_" +0+ "-" +policeIds+ "' style='color:red;font-weight: bold' onClick='deleteSelPolice(this)'></a></li>"
                    $("#p" +jobId+ "_" +t+"_"+i+ " ul").append(li);
                }
            }
        }
	    $("#dutyList_view").mCustomScrollbar({
			theme : "minimal-light",
			autoExpandScrollbar : true,
			axis: "y"
		});
	}

    function printJobNameArrPush(list,jonPos,printJobArr) {
        for(var i = 0; i< list.length; i++){
            if(i==0){
                printJobArr.push(1);
                jonPos = 0;
            }else {
                if(((list[i-1].split("*")[1]).split("%")[0]).split("&")[1]==((list[i].split("*")[1]).split("%")[0]).split("&")[1]){
                    printJobArr[jonPos] += 1;
                    printJobArr.push(0);
                }else {
                    printJobArr.push(1);
                    jonPos = i;
                }
            }
        }
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值