根据json文件实现动态加载tabel表格

时间:2024-05-20 22:29:55

根据json文件实现动态加载tabel表格

前几天公司要求根据json数据动态加载表格,具体需求就是表格的一切内容都不固定,th,td需要根据内容动态加载,还要有点击事件传参
最开始的想法:
1. 因为要兼容ie8,所以一些各种好使的框架都不能用,只能用最原生的或者js来编写。
2.本来需求没搞明白,直接写ajax中data[i].title之类的获取数据。

然后把之前的for循环换成for in 循环,但是json数据是嵌套关系,所以for in 循环把里面的数组都循环出来了
但是对于动态加载只能用用for in循环来写,所以更改了json格式(因为我公司都是前端自己写假json给后台去组成对应的格式)

页面效果~

根据json文件实现动态加载tabel表格

有同样需求的可以直接拿过去修改使用~
下面放代码~

js

// An highlighted block
var table = document.getElementById("table");
    var tr, td;
           $.ajax({
           	type:"get",
           	url:"h.json",
           	async:true
           })
           .done(function(jsondata){
           	  for (i in jsondata) {
                tr = document.createElement("tr");               //创建tr
                //________________创建表头________________________________________
                if (i == 0) {
                    for (j in jsondata[i]) {                                      //根据数据在tr内创建td
                        th = document.createElement("th");
                        th.appendChild(document.createTextNode(jsondata[i][j]));
                        tr.appendChild(th);
                        if(j=="title"){
							th.setAttribute("class","hide");
                		}
                    }  
                     

 					$("thead").append(tr);
                    var title="<h2>"+jsondata[i].title+"</h2>";
              		$(".unit").before(title);
                      
                }
                //________________创建数据行________________________________________
                else {
                    for (j in jsondata[i]) {                                      //根据数据在tr内创建td
                        td = document.createElement("td");
                        td.appendChild(document.createTextNode(jsondata[i][j]));
                      
                        tr.appendChild(td);
                         if(j=="pro_t"){
                    		td.style.fontWeight="bold";
                    		td.setAttribute("colspan","2" )
                    		td.setAttribute("class","plan");
							
                	    }else if(j=="total"){
                    		td.style.fontWeight="bold";
                    		td.setAttribute("colspan","2" )
                	    }
                	  
                	    if(j=="pc_plan"){
                	    	td.setAttribute("onclick","plan(this)" )
                	    }
                	    if(j=="pc_s"){
                	    	td.setAttribute("onclick","started(this)" )
                	    }
                    }
                   
                    $("tbody").append(tr);
                }
                  
              
            }
            document.getElementsByClassName("tableInfo")[0].appendChild(table);
             $("table tr").find("td:eq(1)").addClass('hide started_id')
           		 $("table tr").find("td:eq(0)").addClass('hide plan_id')
           })
  function plan(_this){
  	console.log($(_this).parent().find($(".plan_id")).html())//年度计划项目数点击事件传参的值
  }
  function started(_this){
  	console.log($(_this).parent().find($(".started_id")).html())//年度计划项目数点击事件传参的值
  }

html

// An highlighted block
<div class="tableInfo" >
		<div class="unit">单位:个、万元</div>
		<table id="table" border="1" cellspacing="0" cellpadding="0">
			<thead></thead>
			<tbody></tbody>
		</table>
	</div>

css

// An highlighted block
	.hide{
			background: red;
			display:none;
		}
			table{
			text-align: center;
			margin: 0 auto;
			
		}
		thead th{
			height: 60px;
			padding: 0 6px;
		}
		table td{
			padding:5px;
		}
		a{
			cursor:pointer;
			display: block;
			color: #0000CC;
		}
		.tableInfo h2{
			text-align: center;
		}
		.tableInfo .unit{
			    margin-left: 63%;
    			margin-bottom: 10px;
		}

json格式

// An highlighted block
[
	{
		"title":"{xx}年度1-{yy}月计划内对外捐赠(公益基金会管理)项目进度表",
		"serial":"序号",
		"department":"申报部门单位",
		"plan":"年度计划项目数",
		"started":"已启动项目数",
		"proportion":"启动比例",
		"budget":"年度预算金额",
		"allocated":"已拨付金额",
		"comment":"备注"
	},
	{
		"plan_id":"pro_plan_id",
		"started_id":"pro_star_id",
		"total":"合计",
		"pc_plan":"2",
		"pc_s":"5",
		"pc_pro":"6",
		"pc_bud":"453",
		"pc_allo":"54",
		"pc_com":"yyy"
	},
	{
		"plan_id":"pro_plan_id",
		"started_id":"pro_star_id",
		"pro_t":"一、常规捐赠项目",
		"pc_plan":"2",
		"pc_s":"5",
		"pc_pro":"6",
		"pc_bud":"453",
		"pc_allo":"54",
		"pc_com":"yyy"
	},
	{
		"plan_id":666,
		"started_id":66,
		"index":"1",
		"name":"集团本部",
		"pc_plan":"647",
		"pc_s":"467",
		"pc_pro":"56",
		"pc_bud":"4567456",
		"pc_allo":"5757",
		"pc_com":"yyy"
	},
	{
		"plan_id":44,
		"started_id":444,
		"index":"2",
		"name":"枢纽管理局",
		"pc_plan":"32",
		"pc_s":"5",
		"pc_pro":"6",
		"pc_bud":"453",
		"pc_allo":"54",
		"pc_com":"yyy"
	}
	]

基于某位大佬的代码思路进行编写,该大佬文章链接地址现在找不着了,等我找到立马补上~