打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
javascript表格操作大全:表格排序/倒序、动态添加列、批量删除、删除一行、隔行变色、鼠标悬浮切换背景色、全选/反选。(IE、火狐都兼容)
分类: javaScript 2012-08-16 19:51 3617人阅读 评论(2) 收藏 举报


表格.html

  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. <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
  5. <title>表格操作</title>  
  6.     <script type= "text/javascript" src="domutil.js" ></script>  
  7. </head>  
  8.   
  9. <body>    
  10.       
  11.                 <!--以下数据纯属虚构-->  
  12.   
  13.     <table id="tab" border="1" style =" align:center;text-align:center ">  
  14.         <thead style="background:#0000FF" onmouseover="over(this)" onmouseout="out(this)">  
  15.             <tr>  
  16.                 <th><input type="checkbox" name="quan" onclick="quan()" style="cursor:pointer"/>全选</th>  
  17.                 <th onclick="sortTable('tab',1,'int')" style="cursor:pointer">编号</th>  
  18.                 <th onclick="sortTable('tab',2,'汉字')" style="cursor:pointer">编程语言</th>  
  19.                 <th onclick="sortTable('tab',3,'汉字')" style="cursor:pointer">所属公司</th>  
  20.                 <th onclick="sortTable('tab',4,'float')" style="cursor:pointer">市场份额</th>  
  21.                 <th onclick="sortTable('tab',5,'date')" style="cursor:pointer">诞生日期</th>  
  22.                 <th style="cursor:pointer">操作</th>  
  23.             </tr>  
  24.         </thead>  
  25.         <tbody id="tbody">  
  26.             <tr style="background:#00FF00" onmouseover="over(this)" onmouseout="out(this)">  
  27.                 <td><input type="checkbox" name="checkbox" /></td>  
  28.                 <td width=100 id="ID">4</td>  
  29.                 <td id="name" width="100">Java</td>  
  30.                 <td id="company" width="100" >甲骨文公司</td>  
  31.                 <td id="age" width="100">47.6</td>  
  32.                 <td id="date" width="100">1970/09/09</td>  
  33.                 <td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>  
  34.             </tr>  
  35.             <tr style="background:#00FFFF" onmouseover="over(this)" onmouseout="out(this)">  
  36.                 <td><input type="checkbox" name="checkbox" /></td>  
  37.                 <td width=100 id="ID">6</td>  
  38.                 <td id="name" width="100">ASP</td>  
  39.                 <td id="company" width="100">微软公司</td>  
  40.                 <td id="age" width="100">30.3</td>  
  41.                 <td id="date" width="100">1980/09/09</td>  
  42.                 <td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>  
  43.             </tr>  
  44.             <tr style="background:#00FF00" onmouseover="over(this)" onmouseout="out(this)">  
  45.                 <td><input type="checkbox" name="checkbox" /></td>  
  46.                 <td width=100 id="ID">3</td>  
  47.                 <td id="name" width="100">PHP</td>  
  48.                 <td id="company" width="100">公司Zend</td>  
  49.                 <td id="age" width="100">22.1</td>  
  50.                 <td id="date" width="100">1994/07/09</td>  
  51.                 <td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>  
  52.             </tr>  
  53.             <tr style="background:#00FFFF" onmouseover="over(this)" onmouseout="out(this)">  
  54.                 <td><input type="checkbox" name="checkbox" /></td>  
  55.                 <td width=100 id="ID">1</td>  
  56.                 <td id="name" width="100">Objective-C</td>  
  57.                 <td id="company" width="100" >Stepstone公司</td>  
  58.                 <td id="age" width="100">35.9</td>  
  59.                 <td id="date" width="100">1980/01/01</td>  
  60.                 <td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>  
  61.             </tr>  
  62.             <tr style="background:#00FF00" onmouseover="over(this)" onmouseout="out(this)">  
  63.                 <td><input type="checkbox" name="checkbox" /></td>  
  64.                 <td width=100 id="ID">5</td>  
  65.                 <td id="name" width="100">VB</td>  
  66.                 <td id="company" width="100">美国微软</td>  
  67.                 <td id="age" width="100">32.7</td>  
  68.                 <td id="date" width="100">1991/09/09</td>  
  69.                 <td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>  
  70.             </tr>  
  71.             <tr style="background:#00FFFF" onmouseover="over(this)" onmouseout="out(this)">  
  72.                 <td><input type="checkbox" name="checkbox" /></td>  
  73.                 <td width=100 id="ID">2</td>  
  74.                 <td id="name" width="100">javascript</td>  
  75.                 <td id="company" width="100">Netscape</td>  
  76.                 <td id="age" width="100">33.8</td>  
  77.                 <td id="date" width="100">1992/06/09</td>  
  78.                 <td ><input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)"/></td>  
  79.             </tr>  
  80.         </tbody>  
  81.         <tfoot style="background:#C0C0C0">  
  82.             <tr onmouseover="over(this)" onmouseout="out(this)">  
  83.                 <td><input type="checkbox" name="fan" onclick="fan()"/>反选</td>  
  84.                 <td colspan="6">  
  85.                 <input type="button" value="添加数据" onclick="addRow()" />       
  86.                 <input type="button" value="删除选中行" onclick="deleteChecked()"/>  
  87.                 </td>  
  88.             </tr>  
  89.         </tfoot>  
  90.     </table>  
  91.       
  92. </body>   
  93. <script type="text/javascript">   
  94.         /* 
  95.         全局变量 
  96.         ID:    保存插入数据的编号 
  97.         color:保存原来的背景色 
  98.         */  
  99.         var ID,color;  
  100.         window.onload = function(){  
  101.             var myTab = $q("#tab");  
  102.             ID = myTab.rows.length-1;  
  103.         }  
  104.         //鼠标悬浮在某元素时  
  105.         function over(node){  
  106.             color = node.style.backgroundColor;  
  107.             node.style.backgroundColor = '#FF00FF';  
  108.         }  
  109.         //鼠标离开某元素时  
  110.         function out(node){  
  111.             node.style.backgroundColor = color;  
  112.         }  
  113.         //全选  
  114.         function quan(){  
  115.             var checkArr = $q("$checkbox"); //得到tbody行的集合  
  116.             var qArr = $q("$quan");   
  117.             if(qArr[0].checked){ //如果是全选,设置全部选中  
  118.                 for(var i=0;i<checkArr.length;i++){     
  119.                     checkArr[i].checked = true;  
  120.                 }  
  121.             }else{  //如果没有全选,设置全部没选中  
  122.                 for(var i=0;i<checkArr.length;i++){    
  123.                     checkArr[i].checked = false;  
  124.                 }  
  125.             }  
  126.         }  
  127.   
  128.         //反选  
  129.         function fan(){  
  130.             var checkArr = $q("$checkbox"); //得到tbody行的集合  
  131.             for(var i=0;i<checkArr.length;i++){  //循环将所有行反选  
  132.                 checkArr[i].checked = checkArr[i].checked ? false : true;  
  133.             }  
  134.         }  
  135.   
  136.         //添加一行数据  
  137.         function addRow(){  
  138.             var myTab = $q("#tab");  
  139.             var rowLength = myTab.rows.length;  
  140.             var newRow = document.createElement("tr"); //创建一行  
  141.             //设置隔行变色  
  142.             if(rowLength%2 == 1){  
  143.                 newRow.style.background = "#00FFFF";  
  144.             }else{  
  145.                 newRow.style.background = "#00FF00";  
  146.             }  
  147.             if(newRow.addEventListener){  
  148.                 //给创建的行添加鼠标悬浮的事件  
  149.                 newRow.addEventListener("mouseover",function(){over(newRow);},false);  
  150.                 //给创建的行添加鼠标离开的事件  
  151.                 newRow.addEventListener("mouseout",function(){out(newRow);},false);  
  152.             }else if(newRow.attachEvent){  
  153.                 //给创建的行添加鼠标悬浮的事件  
  154.                 newRow.attachEvent("onmouseover",function(){over(newRow);});  
  155.                 //给创建的行添加鼠标离开的事件  
  156.                 newRow.attachEvent("onmouseout",function(){out(newRow);});  
  157.             }else{  
  158.                 //给创建的行添加鼠标悬浮的事件  
  159.                 newRow.onmouseover = function(){over(newRow);};  
  160.                 //给创建的行添加鼠标离开的事件  
  161.                 newRow.onmouseout = function(){out(newRow);};  
  162.             }    
  163.             //创建多列  
  164.             var newCell1 = document.createElement("td");  
  165.             newCell1.innerHTML = '<input type="checkbox" name="checkbox" />';  
  166.             var newCell2 = document.createElement("td");  
  167.             newCell2.innerHTML = ID;  
  168.             ID += 1;  
  169.             var newCell3 = document.createElement("td");  
  170.             newCell3.innerHTML = prompt("请输入编程语言:","");  
  171.             var newCell4 = document.createElement("td");  
  172.             newCell4.innerHTML = prompt("请输入所属公司:","");  
  173.             var newCell5 = document.createElement("td");  
  174.             newCell5.innerHTML = prompt("请输入市场份额:","");  
  175.             var newCell6 = document.createElement("td");  
  176.             newCell6.innerHTML = prompt("请输入诞生日期:","");  
  177.             var newCell7 = document.createElement("td");  
  178.             newCell7.innerHTML = '<input type="button" value="删除" onclick="deleteRow(this.parentNode.parentNode)" />' ;  
  179.             //将创建的多列添加到行  
  180.             newRow.appendChild(newCell1);  
  181.             newRow.appendChild(newCell2);  
  182.             newRow.appendChild(newCell3);  
  183.             newRow.appendChild(newCell4);  
  184.             newRow.appendChild(newCell5);  
  185.             newRow.appendChild(newCell6);  
  186.             newRow.appendChild(newCell7);  
  187.             var tbody = myTab.tBodies[0]; //获取表格的tbody  
  188.             tbody.appendChild(newRow);  //将创建的行添加到表格body里  
  189.         }   
  190.         //删除一行数据  
  191.         function deleteRow(currentRow){  
  192.             var tab = $q("#tab"); //获得表格节点  
  193.             tab.deleteRow(currentRow.rowIndex); //删除选中的行  
  194.         }  
  195.         //删除多行数据  
  196.         function deleteChecked(){  
  197.             var tab = $q("#tab"); //获得表格节点  
  198.             var checkArr = $q("$checkbox");  //得到tbody行的集合  
  199.             for(var i=0;i<checkArr.length;i++){  
  200.                 if(checkArr[i].checked){  //用循环删除选中的行  
  201.                     var index = checkArr[i].parentNode.parentNode.rowIndex;  
  202.                     tab.deleteRow(index);  
  203.                 }  
  204.             }  
  205.         }  
  206.         //转换数据类型,v为值,dataType为数据类型  
  207.         function convert(v,dataType){  
  208.             switch(dataType){  
  209.                 case "int":  
  210.                     return parseInt(v);  
  211.                 case "float":  
  212.                     return parseFloat(v);  
  213.                 case "date":  
  214.                     return (new Date(Date.parse(v)));  
  215.                 default:  
  216.                     return v.toString();  
  217.             }  
  218.         }  
  219.         //排序函数,index为索引,type为数据类型  
  220.         function pai(index,dataType){  
  221.             if(dataType === "汉字"){  
  222.                 return function compare(a,b){  
  223.                             var str1 = convert(a.cells[index].innerHTML,dataType);   
  224.                             var str2 = convert(b.cells[index].innerHTML,dataType);  
  225.                             return str1.localeCompare(str2);  
  226.                         };  
  227.             }else{  
  228.                 return function compare(a,b){  
  229.                             //var str1 = convert(a.cells[index].firstChild.nodeValue,dataType);  
  230.                             //var str2 = convert(b.cells[index].firstChild.nodeValue,dataType);  
  231.                             var str1 = convert(a.cells[index].innerHTML,dataType); //两种方法效果一样  
  232.                             var str2 = convert(b.cells[index].innerHTML,dataType);  
  233.                             if(str1 < str2){  
  234.                                 return -1;  
  235.                             }else if(str1 > str2){  
  236.                                 return 1;  
  237.                             }else{   
  238.                                 return 0;  
  239.                             }  
  240.                         };  
  241.             }  
  242.         }  
  243.         //排序的过程  
  244.         function sortTable(tableID,index,dataType){  
  245.             var tab = $q("#"+tableID); //获取表格的ID  
  246.             var td = tab.tBodies[0]; //获取表格的tbody  
  247.             var newRows = td.rows;   //获取tbody里的所有行  
  248.             var arr = new Array();   //定义arr数组用于存放tbody里的行  
  249.             //用循环将所有行放入数组  
  250.             for(var i=0;i<newRows.length;i++){  
  251.                 arr.push(newRows[i]);  
  252.             }  
  253.             //判断最后一次排序的列是否与现在要进行排序的列相同,如果是就反序排列  
  254.             if(tab.sortCol == index){  
  255.                 arr.reverse();  
  256.             }else{   
  257.                 //使用数组的sort方法,传进排序函数  
  258.                 arr.sort(pai(index,dataType));  
  259.             }  
  260.             var oFragment = document.createDocumentFragment(); //创建文档碎片  
  261.             for (var i=0; i < arr.length; i++) {  //把排序过的aTRs数组成员依次添加到文档碎片  
  262.                 if(i%2 == 1){  
  263.                     arr[i].style.background = "#00FFFF";  
  264.                     oFragment.appendChild(arr[i]);  
  265.                 }else{  
  266.                     arr[i].style.background = "#00FF00";  
  267.                     oFragment.appendChild(arr[i]);  
  268.                 }  
  269.             }  
  270.             td.appendChild(oFragment); //把文档碎片添加到tbody,完成排序后的显示更新  
  271.             tab.sortCol = index;  //记录最后一次排序的列索引  
  272.         }  
  273.     </script>  
  274. </html>  

domutil.js

(此js为课堂笔记整理而成,有部分代码本次没有用到的)

  1. var CustomFunctions = {  
  2.     //获取子节点的集合(ie,ff通用)  
  3.     getChildNodes:function(node){  
  4.         var arr = [];  
  5.         var nodes = node.childNodes;  
  6.         for(var i in nodes){  
  7.             if(nodes[i].nodeType == 1){ //查找元素节点  
  8.                 arr.push(nodes[i]);  
  9.             }  
  10.         }  
  11.         return arr;  
  12.     },  
  13.     //获取第一个元素子节点(ie,ff通用)  
  14.     getFirstElementChild : function(node){  
  15.         return node.firstElementChild ? node.firstElementChild : node.firstChild ;  
  16.     },  
  17.     //获取最后一个元素子节点(ie,ff通用)  
  18.     getLastElementChild : function(node){  
  19.         return node.lastElementChild ? node.lastElementChild : node.lastChild ;  
  20.     },  
  21.     //获取上一个相邻节点(ie,ff通用)  
  22.     getPreviousSibling : function(node){  
  23.         //找到上一个节点就返回节点,没找到就返回null  
  24.         do{  
  25.             node = node.previousSibling;  
  26.         }while(node && node.nodeType!=1)  
  27.         return node;  
  28.     },  
  29.     //获取下一个相邻节点 (ie,ff通用)  
  30.     getNextSibling : function(node){  
  31.         //找到下一个节点就返回节点,没找到就返回null  
  32.         do{  
  33.             node = node.nextSibling;  
  34.         }while(node && node.nodeType!=1)  
  35.         return node;  
  36.     },  
  37.     //将元素插入到指定的node节点后面  
  38.     insertAfter : function(newNode,targetNode){  
  39.         if(newNode && targetNode){  
  40.             var parent = targetNode.parentNode;  
  41.             var nextNode = this.getNextSibling(targetNode);  
  42.             if(nextNode && parent){  
  43.                 parent.insertBefore(newNode,nextNode);  
  44.             }else{  
  45.                 parent.appendChild(newNode);  
  46.             }  
  47.         }  
  48.     }  
  49. };  
  50.   
  51. /*清除字符串前后的空格*/  
  52. String.prototype.trim=function(){  
  53.     return this.replace(/^\s*|\s*$/,"");  
  54. };  
  55.   
  56. /* 
  57. 查找元素: 
  58. $q("div"):bytagname 
  59. $q(".l"):byclassname 
  60. $q("#l"):byid 
  61. $q("$name"):byname 
  62. selector:选择符 
  63. parentElement:父元素 
  64. */  
  65. window.$q = function(selector,parentElement){  
  66.     if(selector && (typeof selector) === 'string'){  
  67.         selector = selector.trim();//去掉前后空格  
  68.         var parentEl = parentElement || document;  
  69.         var nodeArr = new Array();    
  70.         var firstChar = selector.substr(0,1);   //取得第一个字符  
  71.         //以#开头,表示根据ID查找  
  72.         if(firstChar === '#'){  
  73.             return parentEl.getElementById(selector.substr(1));  
  74.         }  
  75.         //以$开头,根据name查找  
  76.         else if(firstChar === '$'){  
  77.             var all = parentEl.getElementsByTagName("*");  
  78.             for(var i=0;i<all.length;i++){  
  79.                 var name = all[i].getAttribute("name");  
  80.                 if(name === selector.substr(1)){  
  81.                     nodeArr.push(all[i]);  
  82.                 }  
  83.             }  
  84.             delete i;  
  85.             return nodeArr;  
  86.         }  
  87.         //以.开头,根据class名查找  
  88.         else if(firstChar === '.'){  
  89.             var className = selector.substr(1);  
  90.             if(parentEl.getElementsByClassName){  
  91.                 return parentEl.getElementsByClassName(className);  
  92.             }  
  93.             else{  
  94.                 var childList = parentEl.getElementsByTagName("*");  
  95.                 for(var i=0;i<childList.length;i++){  
  96.                     var nodeClassName = childList[i].className;  
  97.                     var classNameArr = nodeClassName.split(' ');  
  98.                     for(var j=0;j<classNameArr.length;j++){  
  99.                         if(classNameArr[j]===className){  
  100.                             nodeArr.push(childList[i]);  
  101.                         }  
  102.                     }  
  103.                     delete j;  
  104.                 }  
  105.                 delete i;  
  106.                 return nodeArr;  
  107.             }  
  108.         }  
  109.         //否则,根据标签名查找  
  110.         else{  
  111.             return parentEl.getElementsByTagName(selector);  
  112.         }  
  113.           
  114.     }  
  115.     else{  
  116.         return document.all || document.getElementsByTagName("*");  
  117.     }  
  118.   
  119. };  


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
JavaScript學習筆記:DOM的操作
【JavaScript】新浪微博批量删除脚本
轻松实现文本无缝隙滚动的代码,图片同理也可实现。
多重条件多重选择实现的js及css结合。还是蛮强的
表格操作(DIV添加和删除表格)
jQuery function的正确书写方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服