js table表格操作大全程式碼例項
本章節分享一段程式碼例項,裡面整合了多個對table表格的操作功能。
算是比較好的一段程式碼,下面分享一下,程式碼比較長,本章節就不做分析了,如有任何問題可以跟帖留言。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <script type="text/javascript"> var mytable=null; window.onload=function(){ mytable=new CTable("tbl",10); //隨機建立10行表格 } Array.prototype.each=function(f){ //陣列的遍歷 for(var i=0;i<this.length;i++) f(this[i],i,this)} function $A(arrayLike){ //數值的填充 for (var i = 0, ret = []; i < arrayLike.length; i++) ret.push(arrayLike[i]); return ret } Function.prototype.bind = function() { //資料的繫結 var __method = this, args = $A(arguments), object = args.shift(); return function() { return __method.apply(object, args.concat($A(arguments))); } } function CTable(id,rows){ this.tbl=typeof(id)=="string"?document.getElementById(id):id; if (rows && /^d+$/.test(rows)) this.addrows(rows) //為表格新增行數 } CTable.prototype={ addrows:function(n){ //隨機新增n行 new Array(n).each(this.add.bind(this)) }, add:function(){ //新增1行 var self=this; var tr = self.tbl.insertRow(-1),td1= tr.insertCell(-1),td2= tr.insertCell(-1),td3= tr.insertCell(-1); var chkbox=document.createElement("INPUT") chkbox.type="checkbox" chkbox.onclick=self.highlight.bind(self) td1.appendChild(chkbox) //第一列新增核取方塊 td1.setAttribute("width","35") td2.innerHTML=Math.ceil(Math.random()*99) //第二列的隨機填充值 td3.innerHTML=Math.ceil(Math.random()*99) //第三列的隨機填充值 }, del:function(){ //刪除所選行 var self=this $A(self.tbl.rows).each(function(tr){if (self.getChkBox(tr).checked) tr.parentNode.removeChild(tr)}) }, up:function(){ //上移所選行 var self=this var upOne=function(tr){ //上移1行 if (tr.rowIndex>0){ self.swapTr(tr,self.tbl.rows[tr.rowIndex-1]) self.getChkBox(tr).checked=true}} var arr=$A(self.tbl.rows).reverse() //反選 if (arr.length>0 && self.getChkBox(arr[arr.length-1]).checked){ for(var i=arr.length-1;i>=0;i--){ if (self.getChkBox(arr[i]).checked){ arr.pop() }else{ break } } } arr.reverse().each(function(tr){ if (self.getChkBox(tr).checked) upOne(tr) }); }, down:function(){ //下移所選行 var self=this var downOne=function(tr){ if (tr.rowIndex<self.tbl.rows.length-1) { self.swapTr(tr,self.tbl.rows[tr.rowIndex+1]); self.getChkBox(tr).checked=true; }} var arr=$A(self.tbl.rows) if (arr.length>0 && self.getChkBox(arr[arr.length-1]).checked){ for(var i=arr.length-1;i>=0;i--){ if (self.getChkBox(arr[i]).checked){ arr.pop() } else{ break } } } arr.reverse().each(function(tr){ if (self.getChkBox(tr).checked) downOne(tr) }); }, sort:function(){ //排序 var self=this,order=arguments[0]; var sortBy=function(a,b){ if (typeof(order)=="number"){ //數字,則按數字指示的列排序 return Number(a.cells[order].innerHTML)>=Number(b.cells[order].innerHTML)?1:-1; //轉化為數字型別比較大小 } else if (typeof(order)=="function"){ //返回結果排序 return order(a,b); }else{ return 1; } } $A(self.tbl.rows).sort(sortBy).each(function(x){ var checkStatus=self.getChkBox(x).checked; self.tbl.firstChild.appendChild(x); if (checkStatus) self.getChkBox(x).checked=checkStatus; }); }, rnd:function(){ //隨即選擇幾行資料 var self=this,selmax=0,tbl=self.tbl; if (tbl.rows.length){ selmax=Math.max(Math.ceil(tbl.rows.length/4),1); //選擇的行數不超過tr數的1/4 $A(tbl.rows).each(function(x){ self.getChkBox(x).checked=false; self.restoreBgColor(x) }) }else{ return alert("無資料可以選") } new Array(selmax).each(function(){ var tr=tbl.rows[Math.floor(Math.random()*tbl.rows.length)] self.getChkBox(tr).checked=true; self.highlight({target:self.getChkBox(tr)}) }) }, highlight:function(){ //設定行的背景色 var self=this; var evt=arguments[0] || window.event var chkbox=evt.srcElement || evt.target var tr=chkbox.parentNode.parentNode chkbox.checked?self.setBgColor(tr):self.restoreBgColor(tr) }, swapTr:function(tr1,tr2){ //交換tr1和tr2的位置 var target=(tr1.rowIndex<tr2.rowIndex)?tr2.nextSibling:tr2; var tBody=tr1.parentNode tBody.replaceChild(tr2,tr1); tBody.insertBefore(tr1,target); }, getChkBox:function(tr){ //從tr得到 checkbox物件 return tr.cells[0].firstChild }, restoreBgColor:function(tr){ tr.style.backgroundColor="#ffffff" }, setBgColor:function(tr){ //設定背景色 tr.style.backgroundColor="#c0c0c0" } } function f(a,b){ var sumRow=function(row){ return Number(row.cells[1].innerHTML)+Number(row.cells[2].innerHTML) }; return sumRow(a)>sumRow(b)?1:-1; } </script> </head> <body> <button>隨機選擇行</button> <button>新增一行</button> <button>刪除選定行</button> <button>上移選定行</button> <button>下移選定行</button> <button>按第一列排序</button> <button>按資料和排序</button> <br/> <br/> <table width=100%> <tr> <td valign="top"><table border id="tbl" width="80%"> </table></td> </tr> </table> </body> </html>
相關文章
- jQuery操作表格table程式碼例項jQuery
- js table表格排序程式碼例項JS排序
- javascript動態操作table表格程式碼例項JavaScript
- table表格美化程式碼例項
- table表格使用程式碼例項
- table細線表格例項程式碼
- js迭代table表格的行和列程式碼例項JS
- table表格隔行變色程式碼例項
- js動態新增和刪除table表格行程式碼例項JS行程
- js 將xml轉換為table表格簡單程式碼例項JSXML
- jQuery table表格隔行換色程式碼例項jQuery
- 檢索table表格資料程式碼例項
- javascript生成指定行列table表格程式碼例項JavaScript
- js動態建立table表格和刪除指定行列程式碼例項JS
- 刪除table表格行和列程式碼例項
- 獲取table表格有多少列程式碼例項
- table表格單元格合併程式碼例項
- javascript新增或者刪除table表格行程式碼例項JavaScript行程
- js table隔行變色效果程式碼例項JS
- js遍歷迭代table表格的每一個td單元格程式碼例項JS
- js獲取table表格指定行和列的單元格內容程式碼例項JS
- javascript動態建立指定行與列table表格程式碼例項JavaScript
- javascript動態刪除或者新增table表格行程式碼例項JavaScript行程
- table表格的thead、tbody和tfoot應用程式碼例項
- angularJS操作input元素程式碼例項AngularJS
- 將table表格內容匯入到word或者Excel程式碼例項Excel
- 滑鼠滑過實現table表格行背景變色程式碼例項
- js將表格匯入到Execel表例項程式碼JS
- table表格單元格橫向和屬性合併程式碼例項
- css細線表格程式碼例項CSS
- dom操作程式碼例項
- table表頭分組程式碼例項
- js刮刮樂程式碼例項JS
- toJSON()程式碼例項JSON
- js實現的查詢表格中的資料程式碼例項JS
- jQuery操作cookie程式碼例項jQueryCookie
- javascript操作xml程式碼例項JavaScriptXML
- JavaScript dom操作程式碼例項JavaScript