用JavaScript 实现表格数据管理
创始人
2024-07-21 06:21:13
0

用JavaScript 实现了表格数据管理的以下几个功能:

  • · 点击添加按钮可以添加一个空的可以修改的记录。
  • · 点击表格单元格可以修改文本。
  • · 修改后实现了保存的接口。
  • · 如果添加了新的记录而未做任何修改值都为null,保存全部时将被忽略。
  • · 保存全部时只保存修改过的值,原有的数据不再重复保存。
  • · 刷新时如果数据未保存则提示保存。
  • · 点击删除时如果是临时添加的无效数据则直接删除,如果保存过的记录则实现了记录删除的接口。

考虑到嵌套的比较多就没有使用form表单,用JavaScript 直接解析dom来分离出了要传递的数据。

先看下运行的效果图:

用js实现了表格数据管理

JavaScript 的代码如下,其中注释较多就不解释了:

  1. var JCRUD=function(tb,colnum,saveAllBtn,add,ajaxSaver,allAjaxSaver,ajaxDeler){  
  2.     var del = tb.getElementsByTagName('a');  
  3.     var span = tb.getElementsByTagName('span');  
  4.     var ctr=[];/* 保存修改的tr对象 */ 
  5.     var delEvent = function(){  
  6.         var dder = this.parentNode.parentNode;  
  7.         this.data=[];  
  8.         for(var i=0; i
  9.             this.data[i] = dder.children[i].children[0].firstChild.nodeValue;  
  10.         var tag = 0;  
  11.         for(var j=0; j
  12.             if(this.data[j]!=='null'){/* 如果修改了单元格的默认值,这里也做相应修改 */ 
  13.                 tag=1;  
  14.                 break;  
  15.             }  
  16.         }  
  17.         for(var k=0; k
  18.         dder.parentNode.removeChild(dder);  
  19.         if(tag==1) ajaxDeler.call(this);  
  20.     };  
  21.     var spanEvent = function(){/* 点击生成修改框 */ 
  22.         var value = this.firstChild.nodeValue;  
  23.         var input = document.createElement('input');  
  24.         input.value = value;  
  25.         this.parentNode.appendChild(input);  
  26.         this.parentNode.removeChild(this);  
  27.         input.focus();  
  28.         input.onblur = function(){/* 失去焦点移除修改框 */ 
  29.             var span = document.createElement('span');  
  30.             span.appendChild(document.createTextNode(this.value?this.value:'null'));
  31. /* 如果修改了单元格的默认值,这里也做相应修改 */ 
  32.             span.onclick =spanEvent;  
  33.             this.parentNode.appendChild(span);  
  34.             this.parentNode.removeChild(this);  
  35.             if(value!=this.value){/* 如果内容改变生成保存按钮 */ 
  36.                 var tr = span.parentNode.parentNode  
  37.                     tds = tr.children;  
  38.                     btns = tds[colnum-1].getElementsByTagName('a');  
  39.                 for(var i=0; i
  40.                     if(btns[i].firstChild.nodeValue!='保存'){  
  41.                         var saver = document.createElement('a');  
  42.                         saver.href="javascript:;";  
  43.                         saver.appendChild(document.createTextNode('保存'));  
  44.                     }else{  
  45.                         var saver = btns[i];  
  46.                     }  
  47.                 }  
  48.                 tds[tds.length-1].appendChild(saver);  
  49.                 var tag=0;  
  50.                 for(var k=0; k
  51.                     if(ctr[k]===tr) tag=1;  
  52.                 if(tag==-0) ctr.push(tr);  
  53.                 saver.onclick=function(){/* 添加保存处理事件 */ 
  54.                     this.data = [];  
  55.                     for(var i=0; i
  56.                         this.data[i] = 
  57. this.parentNode.parentNode.children[i].children[0].firstChild.nodeValue;  
  58.                     ajaxSaver.call(this);  
  59.                     for(var i=ctr.length-1; i>=0; i--){  
  60.                         if(this.parentNode.parentNode===ctr[i]){  
  61.                             ctr.splice(i,1);  
  62.                         }  
  63.                     }  
  64.                     this.parentNode.removeChild(this);  
  65.                 };  
  66.             }  
  67.         }  
  68.     };  
  69.     for(var i in del) del[i].onclick = delEvent;
  70. /* 给现在有元素添加事件 */ 
  71.     for(var j in span) span[j].onclick = spanEvent;  
  72.     add.onclick = function(){  
  73.         var tbody = tb.children[0];  
  74.         var tr = document.createElement('tr');  
  75.         for(var j=0; j
  76.             var td = document.createElement('td');  
  77.             if(j==(colnum-1)){  
  78.                 var del = document.createElement('a');  
  79.                 del.href='javascript:;';  
  80.                 del.appendChild(document.createTextNode('删除'));  
  81.                 del.onclick = delEvent;/* 给新加元素添加事件 */ 
  82.                 td.appendChild(del);  
  83.             }else{  
  84.                 var span = document.createElement('span');  
  85.                 span.appendChild(document.createTextNode('null'));
  86. /* 如果在添加时修改默认值,在这里修改的 */ 
  87.                 td.appendChild(span);  
  88.                 span.onclick =spanEvent;  
  89.             }  
  90.             tr.appendChild(td);  
  91.         }  
  92.         tbody.appendChild(tr);  
  93.     };  
  94.     var getAllData = function(){/* 保存全部的数据解析 */ 
  95.         var allData=[];  
  96.         for(var i=0; i
  97.             allData[i]=[];  
  98.             for(var j=0; j
  99.                 allData[i].push(ctr[i].children[j].children[0].firstChild.nodeValue);  
  100.             ctr[i].children[colnum-1].removeChild(ctr[i].children[colnum-1].children[1]);  
  101.         }  
  102.         ctr=[];  
  103.         return allData;  
  104.     };  
  105.     saveAllBtn.onclick = function(){/* 添加保存全部数据保存事件 */ 
  106.         this.allData = getAllData();  
  107.         if(this.allData.length){  
  108.             allAjaxSaver.call(this);  
  109.         }else{  
  110.             alert('No data!');  
  111.         }  
  112.     };  
  113.     window.onbeforeunload = function(){/* 刷新提示保存数据 */ 
  114.         if(ctr.length){  
  115.             var y = confirm('数据还未保存,是否保存数据?')  
  116.             if(y){  
  117.                 saveAllBtn.click();  
  118.             }  
  119.         }  
  120.     };  
  121. }; 

调用时要传几个参数,有几个参数为函数,每个参数都有注释,调用代码如下:

  1. var table = document.getElementById('tb'),/* 要操作的表格 */ 
  2.     colnum = 5,/* 这里修改表格的列数 */ 
  3.     saveAllBtn = document.getElementById('SaveAll'),/* 保存全部的按钮 */ 
  4.     addBtn = document.getElementById('Add'),/* 添加的按钮 */ 
  5.     saver = function(){  
  6.         /* 此处可以加上ajax效果与数据库交互 data是个数组,需要可以改成JSON */ 
  7.         alert('要传的数据为data数据:"'+this.data+'"此处调用ajax实现后台保存!实现略……');  
  8.     },  
  9.     allSaver = function(){  
  10.         /* 此处可以加上ajax效果与数据库交互 data是个数组,需要可以改成JSON */ 
  11.         alert('要传的数据为allDtat数组:"'+this.allData+'"此处调用ajax实现后台保存!实现略……');  
  12.     },  
  13.     deler = function(){  
  14.         /* 此处可以加上ajax效果与数据库交互 data是个数组,需要可以改成JSON */ 
  15.         alert('要传的数据为data数据:"'+this.data+'"此处调用ajax实现后台删除!实现略……');  
  16.     };  
  17. window.JCRUD(table,colnum,saveAllBtn,addBtn,saver,allSaver,deler); 

可以看出saver、allSaver、deler都是需要自己实现的,这与后台的实现相关,与本例子也没有主要关系也就不实现了,只把要传的数据传过来供使用。

原文链接:http://www.cnblogs.com/jaiho/archive/2011/02/20/table_manager.html

【编辑推荐】

  1. 黑客调查:***JavaScript库是什么?
  2. JavaScript版几种常见排序算法分享
  3. JavaScript对象及继承教程之内置对象
  4. JavaScript内存回收机制深入解读
  5. JavaScript懒加载技术(lazyload)简单实现

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...
德国电信门户网站可实时显示全球... 德国电信周三推出一个门户网站,直观地实时提供其安装在全球各地的传感器网络检测到的网络攻击状况。该网站...
为啥国人偏爱 Mybatis,... 关于 SQL 和 ORM 的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行...
《非诚勿扰》红人闫凤娇被曝厕所... 【51CTO.com 综合消息360安全专家提醒说,“闫凤娇”、“非诚勿扰”已经被黑客盯上成为了“木...
2012年第四季度互联网状况报... [[71653]]  北京时间4月25日消息,据国外媒体报道,全球知名的云平台公司Akamai Te...