CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  JavaScript

[炒冷饭] 发个自己写的表格操作类(添加,删除,排序,上移,下移)

楼主Go_Rush(我的技术博客http://ashun.cnblogs.com/)2006-11-21 19:22:30 在 Web 开发 / JavaScript 提问

 
  <html>  
  <head>  
  <meta   http-equiv="Content-Type"   content="text/html;   charset=gb2312">  
  <style   type="text/css">*{font-size:14px}button{margin:3px}</style>  
  <script   type="text/javascript">  
   
  var   mytable=null,mytable2=null;  
   
  window.onload=function(){  
  mytable=new   CTable("tbl",10);  
  mytable2=new   CTable("tbl2",6);  
  }  
   
  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个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.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(){                       //删除所选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-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(){                       //随即选择几行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<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>  
  <td   valign="top"><table   border   id="tbl2"   width="80%"></table></td>  
  </tr>  
  </table>  
  <br><br>  
  <button     onClick="javascript:mytable2.rnd()">随机选择行</button>  
  <button     onClick="javascript:mytable2.add()">添加一行</button>  
  <button     onClick="javascript:mytable2.del()">删除选定行</button>  
  <button     onClick="javascript:mytable2.up()">上移选定行</button>  
  <button     onClick="javascript:mytable2.down()">下移选定行</button>  
  <button     onClick="javascript:mytable2.sort(2)">按第二列数字排序</button>  
  <button     onClick="javascript:mytable2.sort(f)">按每行数据的和排序</button>  
   
  </body>  
  </html>  
   
   
   
   
   
  问题点数:20、回复次数:43Top

1 楼shilei831115(柔石)回复于 2006-11-21 19:43:16 得分 0

好东东啊     学习ingTop

2 楼godson_2003(载物)回复于 2006-11-22 08:20:45 得分 0

赞一个Top

3 楼dinoLgrace(淡泊以明志,宁静而致远)回复于 2006-11-22 09:26:30 得分 0

楼主厉害啊Top

4 楼rootme()回复于 2006-11-22 09:28:35 得分 0

不错,up.Top

5 楼firefox_1983(钱!钱!钱!)回复于 2006-11-22 09:40:40 得分 0

高手就是不一样,学习Top

6 楼hbhbhbhbhb1021(天外水火(我要多努力))回复于 2006-11-22 09:50:30 得分 0

Go_Rush   (阿舜)的  
  支持下,:)Top

7 楼Go_Rush(我的技术博客http://ashun.cnblogs.com/)回复于 2006-11-22 09:58:59 得分 0

很久没有在csdn发过东西了,不好意思,  
   
  不过CSDN又把我的代码排版搞乱了,本来排得很好看的Top

8 楼JackyWu2003(无名小子)回复于 2006-11-22 09:59:07 得分 0

牛啊!Top

9 楼cancer2000(夜之哀伤)回复于 2006-11-22 10:00:57 得分 0

不错!Top

10 楼senventt()回复于 2006-11-22 10:25:12 得分 0

学习!!!Top

11 楼gwallan()回复于 2006-11-22 10:39:40 得分 0

有价值Top

12 楼ljlyy(亮亮)回复于 2006-11-22 11:59:48 得分 0

有用处!!Top

13 楼xuStanly(依依myLove)回复于 2006-11-22 12:43:46 得分 0

路过Top

14 楼xiehuiqi(谢)回复于 2006-11-22 12:45:47 得分 0

收藏了,佩服Top

15 楼hdebbuddy(smallbonze)回复于 2006-11-22 13:12:31 得分 0

厉害,好好学习Top

16 楼hleosi()回复于 2006-11-22 13:59:29 得分 0

好东东,收了Top

17 楼fantiny(卖身不卖艺的菜鸟)回复于 2006-11-22 14:07:02 得分 0

高手就是不一样,学习Top

18 楼btbtd(签名加载中...请稍候...单击...双击ok)回复于 2006-11-22 14:19:27 得分 0

纯支持,,,表格俺一向反感...Top

19 楼levin9(生活就是強姦,習慣啦就是享受)回复于 2006-11-22 14:21:48 得分 0

高手就是不一样,学习  
  Top

20 楼szh3210(/+/=〆)回复于 2006-11-22 14:44:12 得分 0

学习Top

21 楼ljh_net()回复于 2006-11-22 16:13:57 得分 0

不错,得学习学习!Top

22 楼yorsal(乐乐)回复于 2006-11-22 21:44:08 得分 0

tablesort~Top

23 楼qingang1983(从现在开始)回复于 2006-11-23 09:11:31 得分 0

怎么没有移动单元格距离???Top

24 楼Lailuboy()回复于 2006-11-23 09:27:38 得分 0

StudyTop

25 楼liuph3000()回复于 2006-11-26 14:23:31 得分 0

markTop

26 楼bamboo_2001(千棵竹)回复于 2006-11-26 15:25:47 得分 0

需要消化Top

27 楼daixf_csdn(圣殿骑士【CNO】)回复于 2006-11-26 20:30:28 得分 0

学习Top

28 楼daixf_csdn(圣殿骑士【CNO】)回复于 2006-11-26 20:42:08 得分 0

这个代码写的不常规麻,长见识了Top

29 楼czmcjixiangyang()回复于 2006-11-27 17:54:02 得分 0

强,学习了Top

30 楼czmcjixiangyang()回复于 2006-11-27 17:55:25 得分 0

强烈建议顶这样的好帖子,楼主有联系方式吗?留下qq或信箱,有不会的问题可以请教!!Top

31 楼Go_Rush(我的技术博客http://ashun.cnblogs.com/)回复于 2006-11-27 17:59:29 得分 0

to   czmcjixiangyang  
   
  我刚刚在   博客园   弄了个   blog,   文章还不多,请多关注  
   
  http://ashun.cnblogs.com/  
  Top

32 楼wuluhua2003(人人为我,我为人人)回复于 2006-12-01 14:25:53 得分 0

看不到效果啊Top

33 楼wuluhua2003(人人为我,我为人人)回复于 2006-12-01 14:29:18 得分 0

看到效果了,不好意思啊Top

34 楼xyliulisa()回复于 2006-12-01 16:14:34 得分 0

嗯。看到了,挺不错的。  
  值得收藏。  
  谢谢楼主咯。。。  
   
  Top

35 楼javaoaout(javaoaout)回复于 2006-12-01 16:42:50 得分 0

markTop

36 楼muxrwc(厕所宣言:信念永不变,追猫永不弃。)回复于 2006-12-01 17:10:18 得分 0

upTop

37 楼xue08161981()回复于 2006-12-01 17:20:26 得分 0

高手就是不一样,学习  
  Top

38 楼echo_php()回复于 2006-12-01 17:46:50 得分 0

学习啊Top

39 楼Mapleleaf123(为分而努力)回复于 2006-12-02 10:40:24 得分 0

markTop

40 楼PleaseDoTellMeWhy(Allah bless you!)回复于 2006-12-02 12:24:17 得分 0

我收藏,谢谢!Top

41 楼cansum396(漆黑的夜)回复于 2007-01-11 09:28:34 得分 0

markTop

42 楼nkitten88(天下第一刀)回复于 2007-01-11 15:00:46 得分 0

不错,得学习不错,得学习学习学习Top

43 楼zhlym(ming)回复于 2007-01-11 15:51:34 得分 0

TO   楼主  
   
  看了,不错,有个问题想请教一下我把如下  
  td2.innerHTML=Math.ceil(Math.random()*99)  
  td3.innerHTML=Math.ceil(Math.random()*99)  
  改成  
  td2.innerHTML="<input   type='text'   style='width:100%'   onkeydown='if(event.keyCode==13)event.keyCode=9;'>"  
  td3.innerHTML="<input   type='text'   style='width:100%'   onkeydown='if(event.keyCode==13)event.keyCode=9;'>"  
   
  请问如何按键盘↑↓键做上下光标焦点的跳转呢?3QTop

相关问题

关键词

得分解答快速导航

  • 帖主:Go_Rush

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo