[JavaScript] JavaScript表格常用操作方法汇集 →→→→→进入此内容的聊天室

来自 , 2019-08-17, 写在 JavaScript, 查看 107 次.
URL http://www.code666.cn/view/a1b63b36
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" >
  3. <head>
  4.     <title>无标题页</title>
  5. <script type="text/javascript">
  6. var mytable=null;
  7. window.onload=function(){
  8. mytable=new CTable("tbl",10);      //随机创建10行表格
  9. }
  10. Array.prototype.each=function(f){  //数组的遍历
  11. for(var i=0;i<this.length;i++) f(this[i],i,this)}
  12. function $A(arrayLike){            //数值的填充
  13. for(var i=0,ret=[];i<arrayLike.length;i++) ret.push(arrayLike[i]);
  14. return ret
  15. }
  16. Function.prototype.bind = function() {  //数据的绑定
  17.   var __method = this, args = $A(arguments), object = args.shift();
  18.   return function() {
  19.     return __method.apply(object, args.concat($A(arguments)));
  20.   }
  21. }
  22. function CTable(id,rows){
  23. this.tbl=typeof(id)=="string"?document.getElementById(id):id;
  24. if (rows && /^d+$/.test(rows)) this.addrows(rows)    //为表格添加行数
  25. }
  26. CTable.prototype={
  27. addrows:function(n){          //随机添加n行
  28. new Array(n).each(this.add.bind(this))
  29. },
  30. add:function(){              //添加1行
  31. var self=this;
  32. var tr = self.tbl.insertRow(-1),td1= tr.insertCell(-1),td2= tr.insertCell(-1),td3= tr.insertCell(-1);
  33. var chkbox=document.createElement("INPUT")
  34. chkbox.type="checkbox"
  35. chkbox.onclick=self.highlight.bind(self)
  36. td1.appendChild(chkbox)                    //第一列添加复选框
  37. td1.setAttribute("width","35")
  38. td2.innerHTML=Math.ceil(Math.random()*99)  //第二列的随机填充值
  39. td3.innerHTML=Math.ceil(Math.random()*99)  //第三列的随机填充值
  40. },
  41. del:function(){              //删除所选行
  42. var self=this
  43. $A(self.tbl.rows).each(function(tr){if (self.getChkBox(tr).checked) tr.parentNode.removeChild(tr)})
  44. },
  45. up:function(){              //上移所选行
  46.     var self=this
  47.     var upOne=function(tr){    //上移1行
  48.     if (tr.rowIndex>0){
  49.     self.swapTr(tr,self.tbl.rows[tr.rowIndex-1])
  50.     self.getChkBox(tr).checked=true}}
  51.     var arr=$A(self.tbl.rows).reverse() //反选
  52.     if (arr.length>0 && self.getChkBox(arr[arr.length-1]).checked){
  53.     for(var i=arr.length-1;i>=0;i--){
  54.     if (self.getChkBox(arr[i]).checked){
  55.     arr.pop()          
  56.     }else{
  57.     break}}}
  58.     arr.reverse().each(function(tr){if (self.getChkBox(tr).checked) upOne(tr)});
  59. },
  60. down:function(){          //下移所选行
  61.     var self=this
  62.     var downOne=function(tr){      
  63.     if (tr.rowIndex<self.tbl.rows.length-1)  {
  64.     self.swapTr(tr,self.tbl.rows[tr.rowIndex+1]);
  65.     self.getChkBox(tr).checked=true;
  66.     }}
  67.     var arr=$A(self.tbl.rows)
  68.     if (arr.length>0 && self.getChkBox(arr[arr.length-1]).checked){
  69.     for(var i=arr.length-1;i>=0;i--){
  70.     if (self.getChkBox(arr[i]).checked){
  71.     arr.pop()
  72.     }else{
  73.     break}}
  74.     }
  75.     arr.reverse().each(function(tr){if (self.getChkBox(tr).checked) downOne(tr)});
  76. },
  77. sort:function(){                //排序  
  78. var self=this,order=arguments[0];
  79. var sortBy=function(a,b){
  80. if (typeof(order)=="number"){  //数字,则按数字指示的列排序
  81. return Number(a.cells[order].innerHTML)>=Number(b.cells[order].innerHTML)?1:-1;   //转化为数字类型比较大小
  82. }else if (typeof(order)=="function"){                                             //返回结果排序
  83. return order(a,b);
  84. }else{
  85. return 1;
  86. }
  87. }
  88. $A(self.tbl.rows).sort(sortBy).each(function(x){
  89. var checkStatus=self.getChkBox(x).checked;
  90. self.tbl.firstChild.appendChild(x);
  91. if (checkStatus) self.getChkBox(x).checked=checkStatus;
  92. });
  93. },
  94. rnd:function(){           //随即选择几行数据
  95. var self=this,selmax=0,tbl=self.tbl;
  96. if (tbl.rows.length){
  97.  selmax=Math.max(Math.ceil(tbl.rows.length/4),1);  //选择的行数不超过tr数的1/4
  98.  $A(tbl.rows).each(function(x){
  99. self.getChkBox(x).checked=false;
  100. self.restoreBgColor(x)
  101. })
  102. }else{
  103. return alert("无数据可以选")
  104. }
  105. new Array(selmax).each(function(){
  106. var tr=tbl.rows[Math.floor(Math.random()*tbl.rows.length)]
  107. self.getChkBox(tr).checked=true;
  108. self.highlight({target:self.getChkBox(tr)})
  109. })
  110. },
  111. highlight:function(){               //设置行的背景色
  112. var self=this;
  113. var evt=arguments[0] || window.event
  114. var chkbox=evt.srcElement || evt.target
  115. var tr=chkbox.parentNode.parentNode
  116. chkbox.checked?self.setBgColor(tr):self.restoreBgColor(tr)
  117. },
  118. swapTr:function(tr1,tr2){             //交换tr1和tr2的位置
  119. var target=(tr1.rowIndex<tr2.rowIndex)?tr2.nextSibling:tr2;
  120. var tBody=tr1.parentNode
  121. tBody.replaceChild(tr2,tr1);
  122.     tBody.insertBefore(tr1,target);
  123. },
  124. getChkBox:function(tr){           //从tr得到 checkbox对象
  125. return tr.cells[0].firstChild
  126. },
  127. restoreBgColor:function(tr){          
  128. tr.style.backgroundColor="#ffffff"
  129. },
  130. setBgColor:function(tr){         //设置背景色
  131. tr.style.backgroundColor="#c0c0c0"
  132. }
  133. }
  134.  
  135. function f(a,b){
  136. var sumRow=function(row){return Number(row.cells[1].innerHTML)+Number(row.cells[2].innerHTML)};
  137. return sumRow(a)>sumRow(b)?1:-1;
  138. }
  139. </script>
  140. </head>
  141. <body>
  142. <button  onClick="javascript:mytable.rnd()">随机选择行</button>
  143. <button  onClick="javascript:mytable.add()">添加一行</button>
  144. <button  onClick="javascript:mytable.del()">删除选定行</button>
  145. <button  onClick="javascript:mytable.up()">上移选定行</button>
  146. <button  onClick="javascript:mytable.down()">下移选定行</button>
  147. <button  onClick="javascript:mytable.sort(1)">按第一列排序</button>
  148. <button  onClick="javascript:mytable.sort(f)">按数据和排序</button>
  149. <br/><br/>
  150. <table width=100%>
  151. <tr>
  152. <td valign="top"><table border id="tbl" width="80%"></table></td>
  153. </tr>
  154. </table>
  155. </body>
  156. </html>
  157. //javascript/6850

回复 "JavaScript表格常用操作方法汇集"

这儿你可以回复上面这条便签

captcha