JS操作DOM 使用表格动态展示数据

公司做一个实时监控有一个地方需要把后台推送的数据动态的使用表格进行展示

我知道有一些插件可以做,但问题是我找的那个插件发现动态更新数据时IE内存一直累积,最后会造成崩溃现象

使用别人的插件说起来是效果好一些,功能多一些,但是需要的JS和复杂的逻辑,一旦出问题你很难去处理它

 

我也赶不上再去研究它,我直接手工写一个算了,虽然没有多好的效果,没有额外的功能,但是实现动态表格数据刷新,还是能充分满足要求的!

 

先把代码全部贴出来,只要把这个代码写到HTML中,就能看到效果:

Html代码    收藏代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  5. <title></title>  
  6. <style type="text/css">  
  7. .table0 {  
  8.     font-family: "宋体";  
  9.     font-size: 14px;  
  10.     width: 400px;         
  11.     border-top-width: 1px;  
  12.     border-top-style: solid;  
  13.     border-top-color: #c4cdd4;        
  14.     border-bottom-width: 1px;  
  15.     border-bottom-style: solid;  
  16.     border-bottom-color: #c4cdd4;         
  17.     border-right-width: 1px;  
  18.     border-right-style: solid;  
  19.     border-right-color: #c4cdd4;          
  20.     border-left-width: 1px;  
  21.     border-left-style: solid;  
  22.     border-left-color: #c4cdd4;  
  23. }  
  24. .table0  tr {  
  25.     height : 25px;  
  26.     padding-left:5px;  
  27.     text-align: left;  
  28. }  
  29. .table0 th {  
  30.     color: #4c7c9b;  
  31.     font-weight: normal;  
  32.     background-color: #f1f1f1;  
  33.     height: 25px;  
  34.     border-right-width: 1px;  
  35.     border-right-style: solid;  
  36.     border-right-color: #c4cdd4;  
  37. }  
  38. .table0 td {  
  39.     border-right-width: 1px;  
  40.     border-right-style: solid;  
  41.     border-right-color: #c4cdd4;  
  42.     border-bottom-width: 1px;  
  43.     border-bottom-style: solid;  
  44.     border-bottom-color: #c4cdd4;  
  45. }  
  46. </style>  
  47. <script language="javascript" type="text/javascript">  
  48.     var istt = false;  
  49.     var values = "";  
  50.     function callback(){  
  51.         if(istt){  
  52.             values = "[{'a':1,'b':'1','c':'1','d':'1'},{'a':2,'b':'2','c':'2','d':'2'},{'a':3,'b':'3','c':'3','d':'3'},{'a':4,'b':'4','c':'4','d':'4'}]";  
  53.             istt=false;  
  54.         }else{  
  55.             values = "[{'a':10,'b':'10','c':'10','d':'10'},{'a':20,'b':'20','c':'20','d':'20'},{'a':30,'b':'30','c':'30','d':'30'},{'a':40,'b':'40','c':'40','d':'40'}]";  
  56.             istt=true;  
  57.         }  
  58.         if(null!=values&&''!=values){  
  59.             fnDeleteXLRow(); // 清除除标题外所有行  
  60.             var objs=eval(values); // 解析JSON  
  61.             for(var i=0;i<objs.length;i++){ // 循环对象  
  62.                 var u = objs[i];  
  63.                 var tab=document.getElementById("proc"); // 获得表格  
  64.                 var rows=tab.rows; // 表格ROW对象  
  65.                 var row1=tab.insertRow(rows.length); // 插入一行rows是一个数组,代表没一行,索引从0开始  
  66.                 row1.insertCell(0).innerHTML="&nbsp;"+u.a; // insertCell插入列,从0开始  
  67.                 row1.insertCell(1).innerHTML="&nbsp;"+u.b;  
  68.                 row1.insertCell(2).innerHTML="&nbsp;"+u.c;  
  69.                 row1.insertCell(3).innerHTML="&nbsp;"+u.d;  
  70.             }  
  71.         }  
  72.         // 更新时间的改变  
  73.         document.getElementById("endTime").value=curDateTime();  
  74.         // 垃圾回收  
  75.         CollectGarbage();  
  76.         // 产生回调  
  77.         setTimeout(callback, 1000);   
  78.     }  
  79.     // 删除所有行,不删除标题行  
  80.     function fnDeleteXLRow(){  
  81.         var table = document.getElementById('proc');  
  82.         var rowCount = table.rows.length; // 获得一共多少行,因为不删除标题,所以索引从 1 开始  
  83.         for(var i=1;i<rowCount;i++){  
  84.             table.deleteRow(1); // 因为删除一行以后下面的行会顶上来,所以一直删除第一行即可  
  85.         }  
  86.     }  
  87.     // 获得当前时间  
  88.     function curDateTime(){  
  89.         var d = new Date();   
  90.         var year = d.getYear();   
  91.         var month = d.getMonth()+1;   
  92.         var ddate = d.getDate();   
  93.         var dday = d.getDay();   
  94.         var hours = d.getHours();   
  95.         var minutes = d.getMinutes();   
  96.         var seconds = d.getSeconds();   
  97.         var ms = d.getMilliseconds();     
  98.         var curDateTimeyear;  
  99.         if(month>9)  
  100.          curDateTimecurDateTime = curDateTime +"-"+month;  
  101.         else  
  102.          curDateTimecurDateTime = curDateTime +"-0"+month;  
  103.         if(date>9)  
  104.          curDateTimecurDateTime = curDateTime +"-"+date;  
  105.         else  
  106.          curDateTimecurDateTime = curDateTime +"-0"+date;  
  107.         if(hours>9)  
  108.          curDateTimecurDateTime = curDateTime +" "+hours;  
  109.         else  
  110.          curDateTimecurDateTime = curDateTime +" 0"+hours;  
  111.         if(minutes>9)  
  112.          curDateTimecurDateTime = curDateTime +":"+minutes;  
  113.         else  
  114.          curDateTimecurDateTime = curDateTime +":0"+minutes;  
  115.         if(seconds>9)  
  116.          curDateTimecurDateTime = curDateTime +":"+seconds;  
  117.         else  
  118.          curDateTimecurDateTime = curDateTime +":0"+seconds;  
  119.         return curDateTime;   
  120.     }  
  121.     setTimeout(callback, 1000);   
  122. </script>  
  123. </head>  
  124. <body>  
  125. <div id="table_div" align="left">  
  126. <font size="2px"><b>最后更新时间:</b></font><input type="text" id="endTime" value="00-00-00 00:00:00" readonly="readonly">  
  127. <br>  
  128. <table id="proc" width="98%" border="0" cellspacing="0" cellpadding="0"  class="table0">  
  129.     <tr>  
  130.         <th>&nbsp;<b>A</b></th>  
  131.         <th>&nbsp;<b>B</b></th>  
  132.         <th>&nbsp;<b>C</b></th>  
  133.         <th>&nbsp;<b>D</b></th>  
  134.     </tr>  
  135. </table>  
  136. </div>  
  137. </body>  
  138. </html>  

 

效果:

 

数据会一次是个位数一次是十位数的变化。

 

下面来简单说一下实现:

数据来源可以是推送的,可以是Ajax请求的,数据源就是Json字符串

解析Json,循环获得对象数组,每循环一次增加一行,然后根据属性在行中增加单元格和增加单元格的内容。如果你想,也可以设置行和单元格的样式

 

当然每次增加前要先清除掉除标题以外的所有行,然后再增加

删除单元格的方法:

Js代码    收藏代码
  1. // 删除所有行,不删除标题行  
  2. function fnDeleteXLRow(){  
  3.     var table = document.getElementById('proc');  
  4.     var rowCount = table.rows.length; // 获得一共多少行,因为不删除标题,所以索引从 1 开始  
  5.     for(var i=1;i<rowCount;i++){  
  6.         table.deleteRow(1); // 因为删除一行以后下面的行会顶上来,所以一直删除第一行即可  
  7.     }  
  8. }  

 

获得有多少行,从索引 1 开始循环一定的次数,每次删除的都是 索引 1 ,因为删除之后下面的会顶上来,这个看一下Excel就明白了

 

循环对象增加行和列的代码:

Java代码    收藏代码
  1. for(var i=0;i<objs.length;i++){ // 循环对象  
  2.     var u = objs[i];  
  3.     var tab=document.getElementById("proc"); // 获得表格  
  4.     var rows=tab.rows; // 表格ROW对象  
  5.     var row1=tab.insertRow(rows.length); // 插入一行rows是一个数组,代表没一行,索引从0开始  
  6.     row1.insertCell(0).innerHTML="&nbsp;"+u.a; // insertCell插入列,从0开始  
  7.     row1.insertCell(1).innerHTML="&nbsp;"+u.b;  
  8.     row1.insertCell(2).innerHTML="&nbsp;"+u.c;  
  9.     row1.insertCell(3).innerHTML="&nbsp;"+u.d;  
  10. }  

 

你也可以这样:

Java代码    收藏代码
  1. var row1cell0=row1.insertCell(0);    
  2. // 指定列的样式  
  3. row1cell0.className="m_td1";  

 

来指定行或列的样式,不过一般我们把表格设置一个样式引用,然后在该样式中处理就可以了

Java代码    收藏代码
  1. <table id="proc" width="98%" border="0" cellspacing="0" cellpadding="0"  class="table0">  

 

样式:

Java代码    收藏代码
  1. <style type="text/css">  
  2. .table0 {  
  3.     font-family: "宋体";  
  4.     font-size: 14px;  
  5.     width: 400px;         
  6.     border-top-width: 1px;  
  7.     border-top-style: solid;  
  8.     border-top-color: #c4cdd4;        
  9.     border-bottom-width: 1px;  
  10.     border-bottom-style: solid;  
  11.     border-bottom-color: #c4cdd4;         
  12.     border-right-width: 1px;  
  13.     border-right-style: solid;  
  14.     border-right-color: #c4cdd4;          
  15.     border-left-width: 1px;  
  16.     border-left-style: solid;  
  17.     border-left-color: #c4cdd4;  
  18. }  
  19. .table0  tr {  
  20.     height : 25px;  
  21.     padding-left:5px;  
  22.     text-align: left;  
  23. }  
  24. .table0 th {  
  25.     color: #4c7c9b;  
  26.     font-weight: normal;  
  27.     background-color: #f1f1f1;  
  28.     height: 25px;  
  29.     border-right-width: 1px;  
  30.     border-right-style: solid;  
  31.     border-right-color: #c4cdd4;  
  32. }  
  33. .table0 td {  
  34.     border-right-width: 1px;  
  35.     border-right-style: solid;  
  36.     border-right-color: #c4cdd4;  
  37.     border-bottom-width: 1px;  
  38.     border-bottom-style: solid;  
  39.     border-bottom-color: #c4cdd4;  
  40. }  
  41. </style>  

 

这个样式只针对该表格生效!

 

运行起来就能看到动态的效果,增加 CollectGarbage(); 方法是为了回收一些内容,不用过于纠结!

 

<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值