自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用JavaScript 實(shí)現(xiàn)表格數(shù)據(jù)管理

開發(fā) 前端 數(shù)據(jù)管理
JavaScript 是一種由Netscape的LiveScript發(fā)展而來(lái)的原型化繼承的面向?qū)ο蟮膭?dòng)態(tài)類型的區(qū)分大小寫的客戶端腳本語(yǔ)言,本文主要介紹用JavaScript 實(shí)現(xiàn)了表格數(shù)據(jù)管理的以下幾個(gè)功能的具體辦法。

用JavaScript 實(shí)現(xiàn)了表格數(shù)據(jù)管理的以下幾個(gè)功能:

  • · 點(diǎn)擊添加按鈕可以添加一個(gè)空的可以修改的記錄。
  • · 點(diǎn)擊表格單元格可以修改文本。
  • · 修改后實(shí)現(xiàn)了保存的接口。
  • · 如果添加了新的記錄而未做任何修改值都為null,保存全部時(shí)將被忽略。
  • · 保存全部時(shí)只保存修改過(guò)的值,原有的數(shù)據(jù)不再重復(fù)保存。
  • · 刷新時(shí)如果數(shù)據(jù)未保存則提示保存。
  • · 點(diǎn)擊刪除時(shí)如果是臨時(shí)添加的無(wú)效數(shù)據(jù)則直接刪除,如果保存過(guò)的記錄則實(shí)現(xiàn)了記錄刪除的接口。

考慮到嵌套的比較多就沒(méi)有使用form表單,用JavaScript 直接解析dom來(lái)分離出了要傳遞的數(shù)據(jù)。

先看下運(yùn)行的效果圖:

用js實(shí)現(xiàn)了表格數(shù)據(jù)管理

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對(duì)象 */ 
  5.     var delEvent = function(){  
  6.         var dder = this.parentNode.parentNode;  
  7.         this.data=[];  
  8.         for(var i=0; i<dder.children.length-1; i++)  
  9.             this.data[i] = dder.children[i].children[0].firstChild.nodeValue;  
  10.         var tag = 0;  
  11.         for(var j=0; j<this.data.length; j++){  
  12.             if(this.data[j]!=='null'){/* 如果修改了單元格的默認(rèn)值,這里也做相應(yīng)修改 */ 
  13.                 tag=1;  
  14.                 break;  
  15.             }  
  16.         }  
  17.         for(var k=0; k<ctr.length; k++) if(ctr[k]===dder) ctr.splice(k,1);  
  18.         dder.parentNode.removeChild(dder);  
  19.         if(tag==1) ajaxDeler.call(this);  
  20.     };  
  21.     var spanEvent = function(){/* 點(diǎn)擊生成修改框 */ 
  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(){/* 失去焦點(diǎn)移除修改框 */ 
  29.             var span = document.createElement('span');  
  30.             span.appendChild(document.createTextNode(this.value?this.value:'null'));
  31. /* 如果修改了單元格的默認(rèn)值,這里也做相應(yīng)修改 */ 
  32.             span.onclick =spanEvent;  
  33.             this.parentNode.appendChild(span);  
  34.             this.parentNode.removeChild(this);  
  35.             if(value!=this.value){/* 如果內(nèi)容改變生成保存按鈕 */ 
  36.                 var tr = span.parentNode.parentNode  
  37.                     tds = tr.children;  
  38.                     btns = tds[colnum-1].getElementsByTagName('a');  
  39.                 for(var i=0; i<btns.length; 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<ctr.length; 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<tds.length-1; 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. /* 給現(xiàn)在有元素添加事件 */ 
  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<colnum; 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. /* 如果在添加時(shí)修改默認(rèn)值,在這里修改的 */ 
  87.                 td.appendChild(span);  
  88.                 span.onclick =spanEvent;  
  89.             }  
  90.             tr.appendChild(td);  
  91.         }  
  92.         tbody.appendChild(tr);  
  93.     };  
  94.     var getAllData = function(){/* 保存全部的數(shù)據(jù)解析 */ 
  95.         var allData=[];  
  96.         for(var i=0; i<ctr.length; i++){  
  97.             allData[i]=[];  
  98.             for(var j=0; j<ctr[i].children.length-1; 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(){/* 添加保存全部數(shù)據(jù)保存事件 */ 
  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(){/* 刷新提示保存數(shù)據(jù) */ 
  114.         if(ctr.length){  
  115.             var y = confirm('數(shù)據(jù)還未保存,是否保存數(shù)據(jù)?')  
  116.             if(y){  
  117.                 saveAllBtn.click();  
  118.             }  
  119.         }  
  120.     };  
  121. }; 

調(diào)用時(shí)要傳幾個(gè)參數(shù),有幾個(gè)參數(shù)為函數(shù),每個(gè)參數(shù)都有注釋,調(diào)用代碼如下:

  1. var table = document.getElementById('tb'),/* 要操作的表格 */ 
  2.     colnum = 5,/* 這里修改表格的列數(shù) */ 
  3.     saveAllBtn = document.getElementById('SaveAll'),/* 保存全部的按鈕 */ 
  4.     addBtn = document.getElementById('Add'),/* 添加的按鈕 */ 
  5.     saver = function(){  
  6.         /* 此處可以加上ajax效果與數(shù)據(jù)庫(kù)交互 data是個(gè)數(shù)組,需要可以改成JSON */ 
  7.         alert('要傳的數(shù)據(jù)為data數(shù)據(jù):"'+this.data+'"此處調(diào)用ajax實(shí)現(xiàn)后臺(tái)保存!實(shí)現(xiàn)略……');  
  8.     },  
  9.     allSaver = function(){  
  10.         /* 此處可以加上ajax效果與數(shù)據(jù)庫(kù)交互 data是個(gè)數(shù)組,需要可以改成JSON */ 
  11.         alert('要傳的數(shù)據(jù)為allDtat數(shù)組:"'+this.allData+'"此處調(diào)用ajax實(shí)現(xiàn)后臺(tái)保存!實(shí)現(xiàn)略……');  
  12.     },  
  13.     deler = function(){  
  14.         /* 此處可以加上ajax效果與數(shù)據(jù)庫(kù)交互 data是個(gè)數(shù)組,需要可以改成JSON */ 
  15.         alert('要傳的數(shù)據(jù)為data數(shù)據(jù):"'+this.data+'"此處調(diào)用ajax實(shí)現(xiàn)后臺(tái)刪除!實(shí)現(xiàn)略……');  
  16.     };  
  17. window.JCRUD(table,colnum,saveAllBtn,addBtn,saver,allSaver,deler); 

可以看出saver、allSaver、deler都是需要自己實(shí)現(xiàn)的,這與后臺(tái)的實(shí)現(xiàn)相關(guān),與本例子也沒(méi)有主要關(guān)系也就不實(shí)現(xiàn)了,只把要傳的數(shù)據(jù)傳過(guò)來(lái)供使用。

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

【編輯推薦】

  1. 黑客調(diào)查:***JavaScript庫(kù)是什么?
  2. JavaScript版幾種常見排序算法分享
  3. JavaScript對(duì)象及繼承教程之內(nèi)置對(duì)象
  4. JavaScript內(nèi)存回收機(jī)制深入解讀
  5. JavaScript懶加載技術(shù)(lazyload)簡(jiǎn)單實(shí)現(xiàn)
責(zé)任編輯:陳貽新 來(lái)源: JaiHo的博客
相關(guān)推薦

2013-11-22 10:16:06

NetApp集群模式NetApp存儲(chǔ)

2017-10-12 14:54:52

2023-08-31 16:04:16

數(shù)據(jù)管理可持續(xù)發(fā)展

2023-04-28 07:34:35

數(shù)據(jù)管理數(shù)據(jù)資產(chǎn)管理

2021-04-19 10:38:31

數(shù)據(jù)管理數(shù)字化轉(zhuǎn)型CIO

2019-12-06 10:29:29

云原生數(shù)據(jù)公共云

2023-10-31 07:06:50

運(yùn)營(yíng)數(shù)據(jù)管理

2013-10-31 09:19:42

混合云混合云數(shù)據(jù)管理Data

2022-05-29 22:56:13

數(shù)據(jù)安全元數(shù)據(jù)

2016-11-04 12:46:25

2021-03-27 11:02:04

JavaScript隊(duì)列編程語(yǔ)言

2012-10-09 10:44:49

大數(shù)據(jù)管理大數(shù)據(jù)服務(wù)器

2020-11-15 23:37:06

數(shù)據(jù)管理醫(yī)療保健數(shù)據(jù)數(shù)據(jù)庫(kù)

2022-12-14 14:33:43

云數(shù)據(jù)管理云計(jì)算

2018-07-02 09:59:33

數(shù)據(jù)管理IT

2017-01-05 18:35:57

數(shù)據(jù)管理數(shù)據(jù)治理

2024-02-26 09:15:05

2011-03-28 19:50:48

ibmdwDB2MDM

2022-07-07 10:00:17

數(shù)據(jù)管理大數(shù)據(jù)

2016-02-18 10:27:39

數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)