js基础运用 day 9

 

DOM--有关表格的演示

table.css

table{
	border: #249bdb 1px solid;
	width:500px;
	border-collapse:collapse;
}
table td{
	border: #249bdb 1px solid;
	padding: 5px;
}
table th{
	border: #249bdb 1px solid;
	padding: 5px;
	background-color:rgb(180,180,180);
}

 .one{
		 background-color:#ff80ff;
}
 .two{
		 background-color: #ffff80;
}
.over{
		 background-color: #fff;
		 /*font-size:20px; */
}

版本1

<!DOCTYPE html>
<html>
    <head>
        <title>DOM--有关表格的演示</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <style type="text/css">
            @import url(table.css);
        </style>
		
		<script type="text/javascript">
			/*
			 * <table>
			 *    <tr> <td>1-1</td> </tr>
			 * </table>
			 */
			
			function createTable(){
				//分别创建table,tbody,tr,td节点
				var oTableNode=document.createElement("table");
				var oTbodyNode=document.createElement("tbody");
				var oTrNode=document.createElement("tr");
				var oTdNode = document.createElement("td");
				
				//把table,tbody,tr,td节点组装成一棵子树
				oTableNode.appendChild(oTbodyNode);
				oTbodyNode.appendChild(oTrNode);
				oTrNode.appendChild(oTdNode);
				oTdNode.innerHTML="<b>单元格1-1</b>"
				
				//把子树添加成div1的孩子
				document.getElementById('div1').appendChild(oTableNode);
			}		
		
	    </script>
    </head>
    <body>
    	<input type="button" value="创建表格" onclick="createTable();">	 
		<br/>
		<hr/>
		<div id="div1"></div>
    </body>
</html>

版本2

table对象中的函数:

 createCaption() 为表格创建一个 caption 元素。

 createTFoot() 在表格中创建一个空的 tFoot 元素。

 createTHead() 在表格中创建一个空的 tHead 元素。

 deleteCaption() 从表格删除 caption 元素以及其内容。

 deleteRow() 从表格删除一行。

 deleteTFoot() 从表格删除 tFoot 元素及其内容。

 deleteTHead() 从表格删除 tHead 元素及其内容。

  insertRow() 在表格中插入一个新行。

tr对象中的函数:

deleteCell() 从表格行及 cells 集合中删除指定单元格(td)。

insertCell() 在表格行(tr)中创建新单元格,并将单元格添加到 cells 集合中。

<!DOCTYPE html>
<html>
    <head>
        <title>DOM--有关表格的演示</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <style type="text/css">
            @import url(table.css);
        </style>
        <script type="text/javascript">
            /*
             * <table>
             *    <tr> <td>1-1</td> </tr>
             * </table>
             *
             * table对象中的函数:
             * createCaption() 为表格创建一个 caption 元素。
             createTFoot() 在表格中创建一个空的 tFoot 元素。
             createTHead() 在表格中创建一个空的 tHead 元素。
             deleteCaption() 从表格删除 caption 元素以及其内容。
             deleteRow() 从表格删除一行。
             deleteTFoot() 从表格删除 tFoot 元素及其内容。
             deleteTHead() 从表格删除 tHead 元素及其内容。
             insertRow() 在表格中插入一个新行。
             
             tr对象中的函数:
             deleteCell() 从表格行及 cells 集合中删除指定单元格(td)。
             insertCell() 在表格行(tr)中创建新单元格,并将单元格添加到 cells 集合中。
             
             */
            //用dom提供的专用于表格操作的函数来实现
            function createTable1(){
                //分别创建table,tbody,tr,td节点
                var oTableNode = document.createElement("table");
                
                var oTrNode = oTableNode.insertRow();//创建并添加到oTableNode中
                var oTdNode = oTrNode.insertCell();
                oTdNode.innerHTML = "<b>单元格1-1</b>";
                
                //把子树添加成div1的孩子
                document.getElementById('div1').appendChild(oTableNode);
            }
            
            function createTable2(){
                var oTableNode = document.createElement("table");
                
                for (var i = 0; i <= 5; i++) {
                    var oTrNode = oTableNode.insertRow(); //创建并添加到oTableNode中
                    for (var j = 1; j <= 6; j++) {
                        var oTdNode = oTrNode.insertCell();
                        oTdNode.innerHTML = "<b>单元格" + i + "-" + j + "</b>";
                    }
                }
                
                //把子树添加成div1的孩子
                document.getElementById('div1').appendChild(oTableNode);
            }
        </script>
    </head>
    <body>
        <input type="button" value="创建表格" onclick="createTable2();">
        <br/>
        <hr/>
        <div id="div1">
        </div>
    </body>
</html>

版本3

<!DOCTYPE html>
<html>
    <head>
        <title>DOM--有关表格的演示</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="table.css" />
        <script type="text/javascript">
            
       
            function createTable(){
				//获取用户输入的行数和列数
				
                var rowNum=parseInt(document.getElementsByName("rowNum")[0].value);
                if(isNaN(rowNum)){
					alert("行数必须是整数");
					return;
				}
				var colNum=parseInt(document.getElementsByName("colNum")[0].value);
				if(isNaN(colNum)){
					alert("列数必须是整数");
					return;
				}
				
				var oTableNode=document.createElement("table");
				for(var i=0;i<=rowNum;i++){
					var oTrNode=oTableNode.insertRow();
	                for(var j=1;j<=colNum;j++){
						var oTdNode=oTrNode.insertCell();
						oTdNode.innerHTML="<b>单元格"+i+"-"+j+"</b>";
					}
				}
                //把子树添加成div1的孩子
                document.getElementById('div1').appendChild(oTableNode);
            }
        </script>
    </head>
    <body>
    	行:<input type="text" name="rowNum" />
		列:<input type="text" name="colNum" />
        <input type="button" value="创建表格" onclick="createTable();">
        <br/>
        <hr/>
        <div id="div1">
        </div>
    </body>
</html>

版本4

<!DOCTYPE html>
<html>
    <head>
        <title>DOM--有关表格的演示</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="table.css" />
        <script type="text/javascript">
            
       
            function createTable(){
				//获取用户输入的行数和列数
				
                var rowNum=parseInt(document.getElementsByName("rowNum")[0].value);
                if(isNaN(rowNum)){
					alert("行数必须是整数");
					return;
				}
				var colNum=parseInt(document.getElementsByName("colNum")[0].value);
				if(isNaN(colNum)){
					alert("列数必须是整数");
					return;
				}
				
				var oTableNode=document.createElement("table");
				//为表格添加id属性,两种方法
				//法1: oTableNode.id="tab1"; //如果是一般对象的普通属性如obj的name属性,设置时用obj.name=XXX, 读取时要用obj.name
				//法2: 
				oTableNode.setAttribute("id","tab1"); //如果是一般对象的普通属性如obj的name属性,设置时用obj.setAttribute("name",XXX), 读取时要用obj.getAttribute("name")
				
				
				for(var i=0;i<=rowNum;i++){
					var oTrNode=oTableNode.insertRow();
	                for(var j=1;j<=colNum;j++){
						var oTdNode=oTrNode.insertCell();
						oTdNode.innerHTML="<b>单元格"+i+"-"+j+"</b>";
					}
				}
                //把子树添加成div1的孩子
                document.getElementById('div1').appendChild(oTableNode);
            }
			
			   function delRow(){
			   	//获取表格
				var oTableNode=document.getElementById("tab1");
				if(oTableNode==null){
					alert("表格不存在");
					return;
				}
				
				//获取用户输入的行号
				var rowNum=parseInt(document.getElementsByName("rowNum2")[0].value);
				if(isNaN(rowNum)){
					alert("行数必须是整数");
					return;
				}
				
				if(rowNum<1||rowNum>oTableNode.rows.length){
					alert("不存在要删除的行号!");
					return;
				}
				
				oTableNode.deleteRow(rowNum-1);
				if(oTableNode.rows.length==0){
					oTableNode.parentNode.removeChild(oTableNode);
				}
			   }
			   
			   function delCol(){
			   	  //获取表格
				  var oTableNode=document.getElementById("tab1");
				  if(oTableNode==null){
				  	 alert("表格不存在");
					 return;
				  }
				  //获取用户输入的列数
				  var colNum=parseInt(document.getElementsByName("colNum2")[0].value);
				  if(isNaN(colNum)){
				  	alert("列数必须为整数");
					return;
				  }
				  
				  if(colNum<1||colNum>oTableNode.rows[0].cells.length){
					alert("不存在要删除的列号!");
					return;
				}
				  for(var i=0;i<oTableNode.rows.length;i++){
				  	  oTableNode.rows[i].deleteCell(colNum-1);
				  }
				
				  if(oTableNode.rows[0].cells.length==0){
				  	oTableNode.parentNode.removeChild(oTableNode);
					
				  }
			   }
        </script>
    </head>
    <body>
    	<h3>表格添加</h3>
		行:<input type="text" name="rowNum" />
		列:<input type="text" name="colNum" />
		<input type="button" value="创建表格" onclick="createTable();">	 <br/>
		
		<h3>表格删除</h3>
		行号:<input type="text" name="rowNum2" /> <input type="button" value="删除行" onclick="delRow();">	 <br/>
		
		列号:<input type="text" name="colNum2" /> <input type="button" value="删除列" onclick="delCol();">	 <br/>
		
		<hr/>
		<div id="div1"></div>
    </body>
</html>

版本5

给表格的奇数行与偶数行分别设置不同的背景色---用样式来做,显示风格易扩展

注意:给行对象collTrNodes[x]动态注册事件
               法1 = 这一段再加上后面的两个函数:over(),out()  给每一行(行对象collTrNodes[x])动态注册事件;

  collTrNodes[x].onmouseover=function(){
              over(this);
               };
              collTrNodes[x].onmouseout=function(){
               out(this);
              };

     法2:下面这种方式ok

var oldName;
				collTrNodes[x].onmouseover=function(){
					oldName=this.className;
					this.className="over"
				}
				
				collTrNodes[x].onmouseout=function(){
						this.className=oldName;
					};

下面这种方式挂,因为这是事件注册,相当于填充Java中的方法区代码。事件发生时来原样拷贝这段代码去执行,那时collTrNodes[x]对象已经变样了。

collTrNodes[x].onmouseover=function(){
						oldName = collTrNodes[x].className;
				        collTrNodes[x].className="over";
					};
					collTrNodes[x].onmouseout=function(){
						collTrNodes[x].className=oldName;
					};


     onload 加载有三种方式:

          

  <head>
<script>
  trColor(); //WA不行,因为此时页面表格还未加载

    onload = trColor(); //WA还不行,因为这是执行

  方式1  onload = trColor; //这个行,因为是注册事件响应

//这个也行
方式2	onload = function(){
	trColor(); //这种方式可以传参
}
</script>
 </head>
<html>
<body>
</body>
	
方式3<script type="text/javascript">
		trColor();
	</script>
	
</html>
<!DOCTYPE html>
<html>
    <head>
        <title>DOM--有关表格的演示</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        <link rel="stylesheet" type="text/css" href="table.css" />
        <script type="text/javascript">
            function trColor(){
				//给表格的奇数行与偶数行分别设置不同的背景色---用样式来做,显示风格易扩展
				var oTableNode = document.getElementById("tbData");
				var collTrNodes = oTableNode.rows; //获得所有行集合
				//遍历所有行(除第一行的表头外),分别设置类样式one,two
				for (var x = 1; x < collTrNodes.length; x++) {
					if (x % 2 == 1) {
						collTrNodes[x].className = "one";
					}
					else {
						collTrNodes[x].className = "two";
					}
					
				//////////给行对象collTrNodes[x]动态注册事件/////////////
				//法1 = 这一段再加上后面的两个函数:over(),out() 
			    //给每一行(行对象collTrNodes[x])动态注册事件
				/*collTrNodes[x].onmouseover=function(){
						over(this);
					};
					collTrNodes[x].onmouseout=function(){
						out(this);
					};
				*/	
				
				//法2
				var oldName;
				collTrNodes[x].onmouseover=function(){
					oldName=this.className;
					this.className="over"
				}
				
				collTrNodes[x].onmouseout=function(){
						this.className=oldName;
					};
					
					/* WA 下面的方式不行,因为这是事件注册,相当于填充Java中的方法区代码。事件发生时来原样拷贝这段代码去执行,那时collTrNodes[x]对象已经变样了
					collTrNodes[x].onmouseover=function(){
						oldName = collTrNodes[x].className;
				        collTrNodes[x].className="over";
					};
					collTrNodes[x].onmouseout=function(){
						collTrNodes[x].className=oldName;
					};
					*/
			}
			
			
		}
//          trColor(); //WA不行,因为此时页面表格还未加载
//			onload = trColor(); //WA还不行,因为这是执行
//			onload = trColor; //这个行,因为是注册事件响应
			
			//这个也行
			onload = function(){
				trColor(); //这种方式可以传参
	}
	
	//下面的方式只能在页面加载完毕时执行且只执行这一次。本例中,该方式不合适,因为我们希望表格排序后还能重新进行行间隔显示设置
			/*
			onload=function(){
				//给表格的奇数行与偶数行分别设置不同的背景色---用样式来做,显示风格易扩展
				var oTableNode = document.getElementById("tbData");
				var collTrNodes = oTableNode.rows; //获得所有行集合
				//遍历所有行(除第一行的表头外),分别设置类样式one,two
				for(var x=1; x<collTrNodes.length; x++){
					if(x%2==1){
					   collTrNodes[x].className="one";
					}else{
					   collTrNodes[x].className="two";
					}
				}
			};
			*/
			
			//var oldClass;
//			function over(oTrNode){
//				oldClass = oTrNode.className;
//				oTrNode.className="over";
//			}
//			function out(oTrNode){
//				oTrNode.className=oldClass;
//			}
        </script>
    </head>
	
    <body>
        <h3>表格行背景色间隔显示</h3>
        <table id="tbData">
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>地址</th>
            </tr>
            <!--过度版,实现鼠标悬停背景高亮显示,用HTML的方式先测试一下
            <tr onmouseover="over(this);" onmouseout="out(this);">
            <td>张三</td>
            <td>22</td>
            <td>湖南</td>
            </tr>
            <tr onmouseover="over(this);" onmouseout="out(this);">
            <td>Jack</td>
            <td>21</td>
            <td>浙江</td>
            </tr>-->
            
			
              <tr>
		   	<td>张三</td>
		   	<td>22</td>
		   	<td>湖南</td>
		   </tr>
		   <tr>
		   	<td>Jack</td>
		   	<td>21</td>
		   	<td>浙江</td>
		   </tr>
		   
		   <tr>
		   	<td>Tom</td>
		   	<td>25</td>
		   	<td>江苏</td>
		   </tr>
		   <tr>
		   	<td>张三</td>
		   	<td>18</td>
		   	<td>湖南</td>
		   </tr>
		   <tr>
		   	<td>Jack</td>
		   	<td>20</td>
		   	<td>浙江</td>
		   </tr>
		   <tr>
		   	<td>Tom</td>
		   	<td>25</td>
		   	<td>江苏</td>
		   </tr>
			 
        </table>
    </body>
	<!--
	<script type="text/javascript">
		trColor();
	</script>
	-->
</html>

版本6

给表格的奇数行与偶数行分别设置不同的背景色---用样式来做,显示风格易扩展

表格排序的套路:

 * 1)把要排序的数据(除表头外的那些"行对象") 放到一个临时容器中--数组

  * 2)对临时容器中的数据进行排序

 * 3)把排序后的临时容器中的行对象依次添加到 表格中

<!DOCTYPE html>
<html>
    <head>
        <title>DOM--有关表格的演示</title>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">
        
		<link rel="stylesheet" type="text/css" href="table.css" />
        
		<script type="text/javascript">
			
			var flag=true;//第一次为升序
			
			
            function trColor(){
				//给表格的奇数行与偶数行分别设置不同的背景色---用样式来做,显示风格易扩展
				var oTableNode = document.getElementById("tbData");
				var collTrNodes = oTableNode.rows; //获得所有行集合
				//遍历所有行(除第一行的表头外),分别设置类样式one,two
				for (var x = 1; x < collTrNodes.length; x++) {
					if (x % 2 == 1) {
						collTrNodes[x].className = "one";
					}
					else {
						collTrNodes[x].className = "two";
					}
				}
			}
			
			function trEvent(){
				//给表格的奇数行与偶数行分别设置不同的背景色---用样式来做,显示风格易扩展
				var oTableNode = document.getElementById("tbData");
				var collTrNodes = oTableNode.rows;//获得所有行集合
				//遍历所有行(除第一行的表头外),分别设置类样式one,two
				for (var x = 1; x < collTrNodes.length; x++) {
					var oldName;
					collTrNodes[x].onmouseover = function(){
						oldName = this.className;
						this.className = "over"
					};
					
					collTrNodes[x].onmouseout = function(){
						this.className = oldName;
					};	
				}	
			}
					
			onload = function(){
				trColor(); //这种方式可以传参
				trEvent();
	     }
	
	         
	      /*
			 * 表格排序的套路:
			 * 1)把要排序的数据(除表头外的那些"行对象") 放到一个临时容器中--数组
			 * 2)对临时容器中的数据进行排序
			 * 3)把排序后的临时容器中的行对象依次添加到 表格中
			 */
			function sortTable(oANode){
				var oTableNode=document.getElementById("tbData");
				var collTrNode=oTableNode.rows//获取所有行集合
				
				//1)把要排序的数据(第表头外的那些行对象) 放到一个临时容器中
				var trarr=[];//临时容器
				for(var i=1 ; i<collTrNode.length ;i++){
					 trarr[i-1]=collTrNode[i];
				}
				
				//2)对临时容器中的数据进行排序
				mySort(trarr);
				
				//3)把排序后的临时容器中的行对象依次添加到 表格中
				if (flag) {//升序时顺着加
					for (var x = 0; x < trarr.length; x++) {
						trarr[x].parentNode.appendChild(trarr[x]);//找父亲加孩子,跨浏览器支持
					}
					oANode.innerHTML = "年龄↑";
				}else{//倒序时反着加
					for(var x=trarr.length-1;x>=0;x--){
							trarr[x].parentNode.appendChild(trarr[x]);//找父亲加孩子,跨浏览器支持
					}
					oANode.innerHTML = "年龄↓";
				}
			 
			    flag =!flag; //切换一下
			    
				
				//更新一下行背景间隔显示---重新设置一下
				trColor();			
			}
	 
	 
	        function mySort(arr){//每个元素是行对象
				for(var x=0;x<arr.length-1;x++){
					for (var y = x + 1; y < arr.length; y++) {
					    if(parseInt(arr[x].cells[1].innerText)>parseInt(arr[y].cells[1].innerText)){//比较“年龄”
							//整行交换,即交换行对象
							var temp=arr[x];
							arr[x]=arr[y];
							arr[y]=temp;
						}
					}
				}
			}
        </script>
    </head>
	
    <body>
        <h3>表格排序</h3>
		<table id="tbData">
		   <tr>
		   	<th>姓名</th>
		   	<th> <a href="javascript:void(0);" onclick="sortTable(this);">年龄</a> </th>
		   	<th>地址</th>
		   </tr>
		   
            <!--过度版,实现鼠标悬停背景高亮显示,用HTML的方式先测试一下
            <tr onmouseover="over(this);" onmouseout="out(this);">
            <td>张三</td>
            <td>22</td>
            <td>湖南</td>
            </tr>
            <tr onmouseover="over(this);" onmouseout="out(this);">
            <td>Jack</td>
            <td>21</td>
            <td>浙江</td>
            </tr>-->
            
			
           <tr>
		   	<td>张三</td>
		   	<td>22</td>
		   	<td>湖南</td>
		   </tr>
		   
		   <tr>
		   	<td>Jack</td>
		   	<td>21</td>
		   	<td>浙江</td>
		   </tr>
		   
		   <tr>
		   	<td>Tom</td>
		   	<td>25</td>
		   	<td>江苏</td>
		   </tr>
		   
		   <tr>
		   	<td>张三</td>
		   	<td>18</td>
		   	<td>湖南</td>
		   </tr>
		   
		   <tr>
		   	<td>Jack</td>
		   	<td>20</td>
		   	<td>浙江</td>
		   </tr>
		   
		   <tr>
		   	<td>Tom</td>
		   	<td>25</td>
		   	<td>江苏</td>
		   </tr>
		   
		   <tr>
		   	<td>Mike</td>
		   	<td>5</td>
		   	<td>湖南</td>
		   </tr>
        </table>
    </body>
	<!--
	<script type="text/javascript">
		trColor();
	</script>
	-->
</html>

 

 

猜你喜欢

转载自blog.csdn.net/lx678111/article/details/81238896
今日推荐