[炒冷饭] 发个自己写的表格操作类(添加,删除,排序,上移,下移)
<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




