JS实现table行增加行删除及元素排序

来源:互联网 发布:酷开ulv3.0怎么连网络 编辑:程序博客网 时间:2024/04/29 14:26

示例代码:

  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>
原创粉丝点击