2012/11/11 19:44:27作者:佚名来源:网络
【实例名称】
JS实现表格行的添加、删除、移动、选择操作常用方法
【实例描述】
很多开发工具提供了高性能的表格控件,可以实现行的添加、删除、移动、选择等。本铡将使用JavaScript实现HTML table的这些功能。
【实例代码】
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>无标题页-学无忧(www.xue51.com)</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 onClick="javascript:mytable.rnd()">随机选择行</button> <button onClick="javascript:mytable.add()">添加一行</button> <button onClick="javascript:mytable.del()">删除选定行</button> <button onClick="javascript:mytable.up()">上移选定行</button> <button onClick="javascript:mytable.down()">下移选定行</button> <button onClick="javascript:mytable.sort(1)">按第一列排序</button> <button onClick="javascript:mytable.sort(f)">按数据和排序</button> <br/><br/> <table width=100%> <tr> <td valign="top"><table border id="tbl" width="80%"></table></td> </tr> </table> </body> </html>
【运行效果】

【难点剖析】
本例的重点是如何使用JaVascript创建表格类,并在类中设计表格的常用方法。在本例中手动创建了“add”、“del”等表格操作方法,读者可通过代码注释了解具体的代码实现。
【源码下载】
为了JS代码的准确性,请点击:JS实现表格行的添加、删除、移动、选择操作常用方法 进行本实例源码下载
标签: JS实现 表格 操作
相关文章
够快云库v6.3.24.12120免费版
详情
光影魔术手官方版 v4.7.1
详情
ADsafe净网大师v5.4.408.7000
详情
网易邮箱大师v5.3.2.1015电脑版
详情
foxmailv7.2.25.375
详情
暴风影音5v5.92.0824.1111
详情
暴风影音v5.92.0824.1111
详情
BitComet(比特彗星)v2.13.4.13Beta2
详情
路由优化大师v4.5.31.267
详情
茄子快传电脑版 v5.1.0.7
详情
搜狐影音 v7.2.1.0官方版
详情
搜狐影音客户端 v7.2.1.0
详情
迅雷影音官方版 v7.0.3.92
详情
cbox央视影音v6.0.3.4经典版
详情
potplayer播放器v1.7.22496
详情
Daum PotPlayer(已集成直播源)v1.7.22496绿色纯净美化便携增强版
详情
天国拯救2黄金版 Build.17149332-1.1.1.11377中文版
详情
燕云十六声电脑版 v1.9.31
详情
潜行者2:切尔诺贝利之心 Build.16805297豪华中文版
详情
模拟农场25豪华中文版
详情
迷你世界电脑版 v1.41.00
详情
骑马与砍杀2 v1.2.9.34019免费版
详情
侠盗猎车手圣安地列斯 v1.0最新中文版
详情
整蛊白云 v1.0
详情
地平线4 v1.476中文版
详情
圣女战旗中文v1.1.9绿色免安装版
详情
狂怒2中文
详情
红色警戒2共和国之辉电脑版 v1.0
详情
模拟人生4 v1.0中文免费版
详情
蛊婆v1.0免费版
详情
风起云涌2越南中文版 v1.6Steam正版
详情
使命召唤17官方中文版 v1.0
详情
松鼠记账v6.8.1安卓版
详情
掌门好家长v5.10.0手机版
详情
惠买v5.4.46官方版
详情
快快查汉语字典综合官方版V5.0.0官方版
详情
尚德机构v7.8.1官方版
详情
头像精灵v3.7.0美化版
详情
运满满货主版v7.92.1.0安卓版
详情
运满满司机版app手机版v8.92.1.0安卓版
详情
网易蜗牛读书水墨版V1.9.78
详情
泼辣修图免费版v6.11.3安卓版
详情
泼辣修图安卓版v6.11.3
详情
汽车大师v7.15.5技师版
详情
步多多v2.8.1安卓版
详情
新浪新闻v8.43.7官方版
详情
拓词v14.21安卓版
详情
思尔健康v3.1.42安卓版
详情