Javascript-网页编程-DHTML-表格创建/删除/设置/排序

、对表格的一些操作(创建,删除,设置颜色,排序等)

1、创建表格

1)通过DOM树模型,一层一层的建立表格 ------ 最底层的创建方式,费劲,但功能很强

2)利用table中的现有的功能实现的

注:

1、表格的,<table>标签和<tr>标签中间,其实还隐藏着一个<tbody>标签----表格体,<tbody>下面才是<tr>

2、如果<table>和<tr>之间有空格或换行(空格和换行看成文本节点),则table的第一个孩子节点为文本节点,nodeName:"#text"第二个是tbody

3、<tbody>和#text节点是兄弟关系

只要有空白符出现,皆算一个节点

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <html>  
  2.   <head>  
  3.     <title>DHTML技术演示---表格创建--用table对象和tr对象中现有的方法来操纵表格</title>  
  4.      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5.      <style type="text/css">  
  6.         table {  
  7.             border:#ff80ff;  
  8.             width:600px;  
  9.             border-collapse:collapse;  
  10.         }  
  11.         table td{  
  12.             border:#0000ff 1px solid;  
  13.             padding:5px;  
  14.         }  
  15.      </style>  
  16.        
  17.      <script type="text/javascript">  
  18.         function createTable(){  
  19.             var oTableNode = document.createElement("table");//创建表格对象  
  20.             var oTrNode = oTableNode.insertRow();//往表格对象中插入一个tr对象(空行),并返回该tr对象  
  21.             var oTdNode = oTrNode.insertCell();//往tr对象中插入一个Cell即td对象  
  22.             oTdNode.innerHTML="单元格中的内容";  
  23.             document.getElementsByTagName("div")[0].appendChild(oTableNode);  
  24.         }  
  25.           
  26.         function createTable2(){  
  27.             var oTableNode = document.createElement("table");//创建表格对象  
  28.               
  29.             //多行多列的表格,如5*6  
  30.             for(var x=1;x<=5;x++){  
  31.                 var oTrNode = oTableNode.insertRow();//往表格对象中插入一个tr对象(空行),并返回该tr对象  
  32.                 for(var y=1;y<=8;y++){  
  33.                    var oTdNode = oTrNode.insertCell();//往tr对象中插入一个Cell即td对象  
  34.                    oTdNode.innerHTML="单元格"+x+"-"+y+"中的内容";  
  35.                 }  
  36.             }  
  37.               
  38.             document.getElementsByTagName("div")[0].appendChild(oTableNode);  
  39.         }  
  40.           
  41.         //用户自定义行号与列号的方式创建表格  
  42.         function createTable3(){  
  43.             var oTableNode = document.createElement("table");//创建表格对象  
  44.             //给表格动态地添加属性(id)  
  45.             //法1  
  46.             //oTableNode.id = "tableId";//变量方式  
  47.             //法2  
  48.             oTableNode.setAttribute("id","tableId");//函数的方式  
  49.               
  50.             //由用户指定行数与列数的表格  
  51.             //获取用户输入的行数与列数  
  52.             var rowNum =parseInt(document.getElementsByName("rowNum")[0].value);  
  53.             var colNum =parseInt( document.getElementsByName("colNum")[0].value);  
  54.             //健壮性防护  
  55.             if(isNaN(rowNum) || isNaN(colNum) || rowNum<=0 || colNum<=0 ){  
  56.                 alert("行号和列号必须是大于0的整数");  
  57.                 return;  
  58.             }  
  59.             for(var x=1;x<=rowNum;x++){  
  60.                 var oTrNode = oTableNode.insertRow();//往表格对象中插入一个tr对象(空行),并返回该tr对象  
  61.                 for(var y=1;y<=colNum;y++){  
  62.                    var oTdNode = oTrNode.insertCell();//往tr对象中插入一个Cell即td对象  
  63.                    oTdNode.innerHTML="单元格"+x+"-"+y+"中的内容";  
  64.                 }  
  65.             }  
  66.               
  67.             document.getElementsByTagName("div")[0].appendChild(oTableNode);  
  68.         }  
  69.        
  70.         //删除指定的行  
  71.         function delRow(){  
  72.             //由指定的id来获取该表格  
  73.             var oTableNode = document.getElementById("tableId");  
  74.             //alert(oTableNode.nodeName);  
  75.             //alert(oTableNode);  
  76.             //防护  
  77.             if(oTableNode==null){  
  78.                 alert("表格不存在!");  
  79.                 return;  
  80.             }  
  81.               
  82.             //删除行的处理代码  
  83.             //获取用户输入的行号  
  84.             var delRowNum = parseInt(document.getElementsByName("delRowNum")[0].value);  
  85.             //alert(delRowNum);  
  86.             //行号的健壮性防护  
  87.             if(isNaN(delRowNum) ){  
  88.                 alert("行号必须是数字");  
  89.                 return;  
  90.             }  
  91.             if(!(delRowNum>0 && delRowNum<=oTableNode.rows.length)){  
  92.                 alert("该行不存在!");  
  93.                 return;  
  94.             }   
  95.             //删除行  
  96.             oTableNode.deleteRow(delRowNum-1);  
  97.               
  98.         }  
  99.           
  100.         //删除指定的列  
  101.         function delCol(){  
  102.             //由指定的id来获取该表格  
  103.             var oTableNode = document.getElementById("tableId");  
  104.             //alert(oTableNode.nodeName);  
  105.             //alert(oTableNode);  
  106.             //防护  
  107.             if(oTableNode==null){  
  108.                 alert("表格不存在!");  
  109.                 return;  
  110.             }  
  111.               
  112.             //删除列的处理代码  
  113.             //获取用户输入的列号  
  114.             var delColNum = parseInt(document.getElementsByName("delColNum")[0].value);  
  115.             //alert(delColNum);  
  116.             //行号的健壮性防护  
  117.             if(isNaN(delColNum) ){  
  118.                 alert("列号必须是数字");  
  119.                 return;  
  120.             }  
  121.             if(!(delColNum>0 && delColNum<=oTableNode.rows[0].cells.length)){  
  122.                 alert("该列不存在!");  
  123.                 return;  
  124.             }   
  125.             //删除列:※※表格中没有现成的删除列的函数,因此只能自己遍历行,然后通过tr对象中的deleteCell来实现  
  126.             for(var x=0; x<oTableNode.rows.length;x++){  
  127.                 oTableNode.rows[x].deleteCell( delColNum-1 );  
  128.             }  
  129.               
  130.         }  
  131.           
  132.      </script>  
  133.   </head>  
  134.     
  135.   <body>  
  136.       <input type="button" value="创建表格" οnclick="createTable()" />  
  137.       <input type="button" value="创建多行多列表格" οnclick="createTable2()" />  
  138.       <br/><br/><br/>  
  139.       <!--添加-->  
  140.         行数:<input type="text" name="rowNum"/>     
  141.        列数:<input type="text" name="colNum"/>  
  142.       <input type="button" value="创建表格" οnclick="createTable3()" />  
  143.       <br/><br/><br/>  
  144.        
  145.      <!--删除-->  
  146.      <h3>删除前面由用户指定行列号方式创建的表格</h3> <br/>  
  147.         行号:<input type="text" name="delRowNum"/>     
  148.       <input type="button" value="删除行" οnclick="delRow()" />  
  149.         列号:<input type="text" name="delColNum"/>  
  150.       <input type="button" value="删除列" οnclick="delCol()" />  
  151.       <hr/>  
  152.         
  153.       <div></div>  
  154.         
  155.   </body>  
  156.     
  157. </html>  
效果:

3、设置颜色和排序

1)颜色:通过奇偶行号,设置不同的两种颜色,且鼠标放上后变为第三种颜色,离开后恢复原来颜色

2)排序:通过点击表格中的年龄项,表格中的内容通过年龄的大小,进行排序,且年龄项做出相应的变化

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <html>  
  2.   <head>  
  3.     <title>DHTML技术演示---表格中页面中的显示操纵--行间隔高亮显示</title>  
  4.      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5.      <style type="text/css">  
  6.         @import url(table.css);  
  7.         .one{  
  8.             background:#80ff00;  
  9.         }         
  10.         .two{  
  11.             background:rgb(210,0,0);  
  12.         }  
  13.         .over{  
  14.             background-color:#ffff00;  
  15.         }  
  16.         a{  
  17.             text-decoration:none;  
  18.         }  
  19.      </style>  
  20.        
  21.      <script type="text/javascript">  
  22.         function trColor(){  
  23.             var oTableNode = document.getElementById("dataTable");  
  24.             var arrTrs = oTableNode.rows;  
  25.             for(var x=1;x<arrTrs.length; x++){  
  26.                 if(x%2==1){  
  27.                     arrTrs[x].className="one";  
  28.                 }else{  
  29.                     arrTrs[x].className="two";  
  30.                 }  
  31.                   
  32.                 //为每一行动态注册事件处理方法  
  33.                 var oldClassName;  
  34.                 arrTrs[x].οnmοuseοver=function(){  
  35.                     oldClassName=this.className;  
  36.                     this.className="over";  
  37.                 };  
  38.                 arrTrs[x].οnmοuseοut=function(){  
  39.                     this.className=oldClassName;  
  40.                 };  
  41.                   
  42.             }  
  43.         }  
  44.         //onload = trColor();//这种方式赋值就是执行(本例中,这一句没有效果,因为table对象还没出来。但如果把该段代码放在<table>之后则有效果,放表格内也可以,<span style="font-family: Arial, Helvetica, sans-serif;">但<script>标签要包裹其一起放过去</span><span style="font-family: Arial, Helvetica, sans-serif;">),而且只能执行这一个方法</span>  
  45.             onload = function(){  
  46.             trColor();  
  47.             //还可以在这里写其它代码,甚至调用其它函数  
  48.         };//这种方式只是给onload事件注册响应函数,解析该句代码时函数并没有执行,而是在该事件发生时才会调用。并且可以在function()中调用多个函数.  
  49.      </script>  
  50.        
  51.      <script type="text/javascript">  
  52.         /* 
  53.         function over(trNode){ 
  54.             trNode.className="over"; 
  55.              
  56.         } 
  57.         */  
  58.         var flag = true;  
  59.         function sortTable(aNode){  
  60.             var oTableNode = document.getElementById("dataTable");  
  61.             var arrTrs = oTableNode.rows;  
  62.               
  63.             //思路:用一个新的容器来存放表格的行对象数组,并在新数组中进行排序,把排序后的每个元素(行对象)依次添加到表格对象中  
  64.             //放到新容器arrTrs2中  
  65.             var arrTrs2=[];  
  66.             for(var x=1;x<arrTrs.length;x++){  
  67.                 arrTrs2[x-1] = arrTrs[x];  
  68.             }  
  69.             //对容器arrTrs2中的元素进行排序  
  70.             mySort(arrTrs2);  
  71.               
  72.             //把排序后的行对象重新加到表格中  
  73.             if(flag){  
  74.                 for(var x=0;x<arrTrs2.length;x++){  
  75.                     arrTrs2[x].parentNode.appendChild(arrTrs2[x]);  
  76.                 }  
  77.                 aNode.innerHTML="年龄↓";  
  78.             }else{  
  79.                 for(var x=arrTrs2.length-1;x>=0;x--){  
  80.                     arrTrs2[x].parentNode.appendChild(arrTrs2[x]);  
  81.                 }  
  82.                 aNode.innerHTML="年龄↑";  
  83.             }  
  84.             flag = !flag;  
  85.             trColor();  
  86.         }  
  87.           
  88.         function mySort(arr){  
  89.             for(var x=0;x<arr.length-1;x++){  
  90.                 for(var y=x+1;y<arr.length;y++){  
  91.                     if(parseInt(arr[x].cells[1].innerText) > parseInt(arr[y].cells[1].innerText)){  
  92.                         var temp = arr[x];  
  93.                         arr[x] = arr[y];  
  94.                         arr[y] = temp;  
  95.                     }  
  96.                 }  
  97.             }  
  98.         }  
  99.           
  100.      </script>  
  101.        
  102.   </head>  
  103.     
  104.   <body>  
  105.       <table id="dataTable">  
  106.          <tr>  
  107.             <th>姓名</th> <th><a href="javascript:void(0)" οnclick="sortTable(this)">年龄</a></th> <th>地址</th>  
  108.          </tr>  
  109.         <tr>  
  110.             <td>张三</td> <td>22</td> <td>湖南长沙</td>  
  111.         </tr>  
  112.         <tr>  
  113.             <td>李四</td> <td>33</td> <td>湖南长沙</td>  
  114.         </tr>  
  115.         <tr>  
  116.             <td>王五</td> <td>21</td> <td>湖南长沙</td>  
  117.         </tr>  
  118.         <tr>  
  119.             <td>Jack</td> <td>20</td> <td>湖南长沙</td>  
  120.         </tr>  
  121.         <tr>  
  122.             <td>Rose</td> <td>43</td> <td>湖南长沙</td>  
  123.         </tr>  
  124.         <tr>  
  125.             <td>Jack</td> <td>53</td> <td>湖南长沙</td>  
  126.         </tr>  
  127.         <tr>  
  128.             <td>Rose</td> <td>35</td> <td>湖南长沙</td>  
  129.         </tr>  
  130.         <tr>  
  131.             <td>Jack</td> <td>13</td> <td>湖南长沙</td>  
  132.         </tr>  
  133.         <tr>  
  134.             <td>Rose</td> <td>30</td> <td>湖南长沙</td>  
  135.         </tr>  
  136.       </table>  
  137.   </body>  
  138.     
  139. </html>  




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值