表格操作类(添加,删除,排序,上移,下移)

导读:
  
  
  
  
  
  
  
  
  
  
  
  
  
  <script type="text/javascript">
  
  
  
  
  
  var mytable=null,mytable2=null
  
  
  
  
  
  
  window.οnlοad=function()
  
  {
  
  
  mytable=new CTable("tbl",10);
  
  
  mytable2=new CTable("tbl2",6);
  
  
  }
  
  
  
  
  
  
  Array.prototype.each=function(f)
  
  {for(var i=0i
  
  
  
  
  
  function $A(arrayLike)
  
  {
  
  for(var i=0,ret=[];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个tr
  
  new Array(n).each(this.add.bind(this))
  
  
  },
  
  
  
  
  add:function()
  
  { //添加1个tr
  
  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.οnclick=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()
  
  { //删除所选tr
  
  var self=this
  
  
  
  
  $A(self.tbl.rows).each(function(tr)
  
  {if (self.getChkBox(tr).checked) tr.parentNode.removeChild(tr)})
  
  
  },
  
  
  
  
  up:function()
  
  { //上移所选tr
  
  var self=this
  
  
  
  var upOne=function(tr)
  
  { //上移1个tr
  
  
  
  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-1i>=0i--)
  
  {
  
  
  
  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.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-1i>=0i--)
  
  {
  
  
  
  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()
  
  { //随即选择几行tr
  
  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()
  
  { //设置tr的背景色
  
  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
  
  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>
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  









     
     
     
           
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  

本文转自
http://www.cnblogs.com/zyh-nhy/archive/2007/08/14/855063.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值