js表格动态操作

  1. <html>  
  2.   <head>  
  3.   <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  4.   <style   type="text/css">*{font-size:14px}button{margin:3px}</style>  
  5.   <script   type="text/javascript">  
  6.    
  7.   var   mytable=null,mytable2=null;  
  8.    
  9.   window.onload=function(){  
  10.   mytable=new   CTable("tbl",10);  
  11.   mytable2=new   CTable("tbl2",6);  
  12.   }  
  13.    
  14.   Array.prototype.each=function(f){for(var   i=0;i<this.length;i++)   f(this[i],i,this)}  
  15.    
  16.   function   $A(arrayLike){  
  17.   for(var   i=0,ret=[];i<arrayLike.length;i++)   ret.push(arrayLike[i]);  
  18.   return   ret  
  19.   }  
  20.    
  21.   Function.prototype.bind   =   function()   {  
  22.       var   __method   =   this,   args   =   $A(arguments),   object   =   args.shift();  
  23.       return   function()   {  
  24.           return   __method.apply(object,   args.concat($A(arguments)));  
  25.       }  
  26.   }  
  27.    
  28.    
  29.   function   CTable(id,rows){  
  30.   this.tbl=typeof(id)=="string"?document.getElementById(id):id;    
  31.   if   (rows   &&   /^/d+$/.test(rows))   this.addrows(rows)  
  32.   }  
  33.    
  34.   CTable.prototype={  
  35.   addrows:function(n){                     //随机添加n个tr  
  36.   new   Array(n).each(this.add.bind(this))  
  37.   },  
  38.   add:function(){                       //添加1个tr  
  39.   var   self=this;  
  40.   var   tr   =   self.tbl.insertRow(-1),td1=   tr.insertCell(-1),td2=   tr.insertCell(-1),td3=   tr.insertCell(-1);  
  41.   var   chkbox=document.createElement("INPUT")  
  42.   chkbox.type="checkbox"  
  43.   chkbox.onclick=self.highlight.bind(self)  
  44.   td1.appendChild(chkbox)  
  45.   td1.setAttribute("width","35")  
  46.   td2.innerHTML=Math.ceil(Math.random()*99)  
  47.   td3.innerHTML=Math.ceil(Math.random()*99)  
  48.   },  
  49.   del:function(){                       //删除所选tr  
  50.   var   self=this  
  51.   $A(self.tbl.rows).each(function(tr){if   (self.getChkBox(tr).checked)   tr.parentNode.removeChild(tr)})  
  52.   },  
  53.   up:function(){                             //上移所选tr  
  54.   var   self=this  
  55.   var   upOne=function(tr){                     //上移1个tr  
  56.   if   (tr.rowIndex>0){  
  57.   self.swapTr(tr,self.tbl.rows[tr.rowIndex-1])  
  58.   self.getChkBox(tr).checked=true  
  59.   }  
  60.   }  
  61.   var   arr=$A(self.tbl.rows).reverse()  
  62.   if   (arr.length>0   &&   self.getChkBox(arr[arr.length-1]).checked){  
  63.   for(var   i=arr.length-1;i>=0;i--){  
  64.   if   (self.getChkBox(arr[i]).checked){  
  65.   arr.pop()                        
  66.   }else{  
  67.   break  
  68.   }  
  69.   }  
  70.   }  
  71.   arr.reverse().each(function(tr){if   (self.getChkBox(tr).checked)   upOne(tr)});  
  72.   },  
  73.   down:function(){  
  74.   var   self=this  
  75.   var   downOne=function(tr){              
  76.   if   (tr.rowIndex<self.tbl.rows.length-1)     {  
  77.   self.swapTr(tr,self.tbl.rows[tr.rowIndex+1]);  
  78.   self.getChkBox(tr).checked=true;  
  79.   }  
  80.   }  
  81.   var   arr=$A(self.tbl.rows)  
  82.    
  83.   if   (arr.length>0   &&   self.getChkBox(arr[arr.length-1]).checked){  
  84.   for(var   i=arr.length-1;i>=0;i--){  
  85.   if   (self.getChkBox(arr[i]).checked){  
  86.   arr.pop()  
  87.   }else{  
  88.   break  
  89.   }  
  90.   }  
  91.   }  
  92.   arr.reverse().each(function(tr){if   (self.getChkBox(tr).checked)   downOne(tr)});  
  93.   },  
  94.   sort:function(){                       //排序      
  95.   var   self=this,order=arguments[0];  
  96.   var   sortBy=function(a,b){  
  97.   if   (typeof(order)=="number"){     //数字,则按数字指示的列排序  
  98.   return   Number(a.cells[order].innerHTML)>=Number(b.cells[order].innerHTML)?1:-1;       //转化为数字类型比较大小  
  99.   }else   if   (typeof(order)=="function"){           //为程序,按   程序的返回结果排序  
  100.   return   order(a,b);  
  101.   }else{  
  102.   return   1;  
  103.   }  
  104.   }  
  105.   $A(self.tbl.rows).sort(sortBy).each(function(x){  
  106.   var   checkStatus=self.getChkBox(x).checked;  
  107.   self.tbl.firstChild.appendChild(x);  
  108.   if   (checkStatus)   self.getChkBox(x).checked=checkStatus;  
  109.   });  
  110.   },  
  111.   rnd:function(){                       //随即选择几行tr  
  112.   var   self=this,selmax=0,tbl=self.tbl;  
  113.   if   (tbl.rows.length){  
  114.     selmax=Math.max(Math.ceil(tbl.rows.length/4),1);     //选择的行数不超过tr数的1/4  
  115.     $A(tbl.rows).each(function(x){  
  116.   self.getChkBox(x).checked=false;  
  117.   self.restoreBgColor(x)  
  118.   })  
  119.   }else{  
  120.   return   alert("无数据可以选")  
  121.   }  
  122.   new   Array(selmax).each(function(){  
  123.   var   tr=tbl.rows[Math.floor(Math.random()*tbl.rows.length)]  
  124.   self.getChkBox(tr).checked=true;  
  125.   self.highlight({target:self.getChkBox(tr)})  
  126.   })  
  127.   },  
  128.   highlight:function(){                               //设置tr的背景色  
  129.   var   self=this;  
  130.   var   evt=arguments[0]   ||   window.event  
  131.   var   chkbox=evt.srcElement   ||   evt.target  
  132.   var   tr=chkbox.parentNode.parentNode  
  133.   chkbox.checked?self.setBgColor(tr):self.restoreBgColor(tr)  
  134.   },  
  135.   swapTr:function(tr1,tr2){                           //交换tr1和tr2的位置  
  136.   var   target=(tr1.rowIndex<tr2.rowIndex)?tr2.nextSibling:tr2;  
  137.   var   tBody=tr1.parentNode  
  138.   tBody.replaceChild(tr2,tr1);  
  139.           tBody.insertBefore(tr1,target);  
  140.   },  
  141.   getChkBox:function(tr){                       //从tr得到   checkbox对象  
  142.   return   tr.cells[0].firstChild  
  143.   },  
  144.   restoreBgColor:function(tr){                      
  145.   tr.style.backgroundColor="#ffffff"    
  146.   },  
  147.   setBgColor:function(tr){  
  148.   tr.style.backgroundColor="#c0c0c0"  
  149.   }  
  150.   }  
  151.    
  152.   function   f(a,b){  
  153.   var   sumRow=function(row){return   Number(row.cells[1].innerHTML)+Number(row.cells[2].innerHTML)};  
  154.   return   sumRow(a)>sumRow(b)?1:-1;  
  155.   }  
  156.    
  157.   </script>  
  158.    
  159.   </head>  
  160.   <body>  
  161.    
  162.   <button     onClick="javascript:mytable.rnd()">随机选择行</button>  
  163.   <button     onClick="javascript:mytable.add()">添加一行</button>  
  164.   <button     onClick="javascript:mytable.del()">删除选定行</button>  
  165.   <button     onClick="javascript:mytable.up()">上移选定行</button>  
  166.   <button     onClick="javascript:mytable.down()">下移选定行</button>  
  167.   <button     onClick="javascript:mytable.sort(1)">按第一列数字排序</button>  
  168.   <button     onClick="javascript:mytable.sort(f)">按每行数据的和排序</button>  
  169.   <br><br>  
  170.   <table   width=100%>  
  171.   <tr>  
  172.   <td   valign="top"><table   border   id="tbl"   width="80%"></table></td>  
  173.   <td   valign="top"><table   border   id="tbl2"   width="80%"></table></td>  
  174.   </tr>  
  175.   </table>  
  176.   <br><br>  
  177.   <button     onClick="javascript:mytable2.rnd()">随机选择行</button>  
  178.   <button     onClick="javascript:mytable2.add()">添加一行</button>  
  179.   <button     onClick="javascript:mytable2.del()">删除选定行</button>  
  180.   <button     onClick="javascript:mytable2.up()">上移选定行</button>  
  181.   <button     onClick="javascript:mytable2.down()">下移选定行</button>  
  182.   <button     onClick="javascript:mytable2.sort(2)">按第二列数字排序</button>  
  183.   <button     onClick="javascript:mytable2.sort(f)">按每行数据的和排序</button>  
  184.    
  185.   </body>  
  186.   </html>  
  187.     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值