JavaScript视频教程 - 毕向东 - Table标签示例

DOM编程步骤总结:

1、定义界面:通过html的标签将数据进行封装

2、定义一些静态的样式:通过css

3、需要动态完成的和用户的交互:

a、先明确事件源

b、明确事件将事件注册到事件源上

c、通过javascript的函数对对象事件进行处理

d、在处理过程中需要明确被处理的区域



Table标签示例


1、在页面上通过按钮创建一个表格。

思路:

1.1、创建一个table节点。document.createElement(“table”);

1.2、通过table节点的insertRow()方法创建表格的行,并添加到rows集合中。

1.3、通过行对象的insertCell()方法创建单元格对象,并添加到cells集合中。

1.4、给单元格中添加数据。

a、创建一个节点如文本节点,document.createTextNode(“文本内容”)

通过单元格对象appendChild方法将文本节点添加到单元格的尾部。

b、可以通过单元格的innerHTML,添加单元格中的元素。

TdNode.innerHTML = “< img src=’1.jpg’ alt = ‘图片说明信息’ />”

1.5、建立好表格节点,添加到DOM树中。也就是网页中的指定位置上。

CODE:定义页面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<body>
行:<input type="text" name="rowNum" />
列:<input type="text" name="colNum" />
|||<input type="text" name="delrow" /><input type="button" value="删除行" οnclick="delRow()"/>
<input type="text" name="delcol" /><input type="button" value="删除列" οnclick="delCol()"/>
<br/>
<input type="button" value="创建表格" οnclick="createTable()"/>
<br />
<div>
</div>
</body>
</html>


CODE:创建表格JS

function createTable()
{
	var tabNode = document.createElement("table"); //取表节点对象
	tabNode.id = "tableid";
	//alert(tabNode.nodeName);
	var rownum = byName("rowNum")[0].value; //取行数
	//alert(rownum);
	var colnum = byName("colNum")[0].value; //取列数
	//alert(colnum);
	for(var x = 1 ; x <= rownum ; x++)
	{
		var trNode = tabNode.insertRow();
		for(var y = 1 ; y <= colnum ; y++)
		{
			var tdNode = trNode.insertCell();
			tdNode.innerHTML = x+" ... "+y;
		}
	}
	byTag("div")[0].appendChild(tabNode); 
	event.srcElement.disabled  = true;
}

2、如何删除表格中的行或者列。

思路:

2.1、删除行:获取表格对象,通过表格对象中的deleteRow方法,将指定的行索引传入deleteRow方法中。
2.2、删除列:表格没有直接删除列的方法,要通过删除每一行中指定的单元格来完成删除列的动作。
获取所有的行对象,并进行遍历,通过行对象的deleteCell方法将指定单元格删除。

CODE:删除表格中的行或列JS

function delRow()
{
	var rownum = document.getElementsByName("delrow")[0].value;
	//alert(rownum);
	var tabNode = document.getElementById("tableid");
	//alert(tabNode.nodeName);
	if(tabNode==null)
	{
		alert("表格未创建");
		return ;
	}
	if(rownum > 0 && rownum<=tabNode.rows.length)
		tabNode.deleteRow(rownum-1);
	else
	{
		alert("行号不存在");
	}
}
function delCol()
{
	var colnum = document.getElementsByName("delcol")[0].value;
	//alert(rownum);
	var tabNode = document.getElementById("tableid");
	//alert(tabNode.nodeName);
	if(tabNode==null)
	{
		alert("表格未创建");
		return ;
	}
	if(colnum>0 && colnum <= tabNode.rows[0].cells.length)
	{
		for(var x = 1 ; x <= tabNode.rows.length ; x++)
		{
			var trNode = tabNode.rows[x-1];
			trNode.deleteCell(colnum-1);
		}
	}else
	{
		alert("列不存在");
	}
}

3、对表格中的数据进行排序

思路:

3.1、获取表格中的所有行对象

3.2、定义临时存储,将需要进行排序的行对象存入到数组中

3.3、对数组进行排序,通过比较每一个行对象中指定单元格中的数据,如果是整数需要通过parseInt转换。

3.4、将排序后的数组通过遍历,将每一个行对象重新添加回表格。通过tbody节点的appendChild方法。

3.5、其实排序就是将每一个行对象引用取出。

CODE:对表格中的数据进行排序

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="docTool.js"></script>
<link rel="stylesheet" href="sorttab.css" />
    <!--
    	表格中按照年龄的顺序进行排序
        
        思路:
        1、每一个人的信息是一行,那么先将行都取出,临时存入到数组中
        2、并对数组中的行对象的其中一个单元格中的数据进行排序
        3、将排序后的行对象重新添加至表哥对象中
    -->
    
<script type="text/javascript">
	var flag = true;    
	function sorttab()
	{
		var tabNode = byTag("table")[0];
		//alert(tabNode.nodeName);
		var trNodes = tabNode.rows;
		//alert(trNodes.length);
		var arr = new Array();
		for(var x = 1 ; x < trNodes.length ; x++)
		{
			arr[x-1] = trNodes[x];
		}
		//alert(arr.length);
		sort(arr);//排序
		var tbdNode = tabNode.getElementsByTagName("tbody")[0]; //去tbody节点对象
		//alert(tbdNode.nodeName);
		if(flag){
			for(var x = 0 ; x < arr.length ; x++)
			{
				//alert(arr[x].cells[1].innerText)
				tbdNode.appendChild(arr[x]);//追加子元素至表格底部
			}
			flag = false;
		}else{
			for(var x = arr.length-1 ; x >=0 ; x--)
			{
				//alert(arr[x].cells[1].innerText)
				tbdNode.appendChild(arr[x]);//追加子元素至表格底部
			}
			flag = true;
		}
	}
	function sort(arr)
	{
		for(var x = 0 ; x < arr.length ; x++)
		{
			for(var y = x ; 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>
<table>
    	<tr>
        	<th>姓名</th>
<th><a href="javascript:void(0)" οnclick="sorttab()">年龄</a></th>
<th>地址</th>
        </tr>
        
        <tr>
        	<td>黄亮</td>
            <td>25</td>
            <td>株洲</td>
        </tr>
        
        <tr>
        	<td>李波</td>
            <td>5</td>
            <td>永州</td>
        </tr>
        
        <tr>
        	<td>冯志</td>
            <td>29</td>
            <td>湘潭</td>
        </tr>
        
        <tr>
        	<td>戴亮</td>
            <td>22</td>
            <td>长沙</td>
        </tr>
        
        <tr>
        	<td>周正举</td>
            <td>24</td>
            <td>娄底</td>
        </tr>
        
        <tr>
        	<td>孙俪</td>
            <td>34</td>
            <td>北京</td>
        </tr>
    </table>
</body>
</html>



4、表格的行颜色间隔显示,并在鼠标指定的行上高亮显示。

思路:

4.1、获取所有的行对象,将需要间隔颜色显示的行对象进行动态的className属性的指定,那么前提是:先定义好类选择器。

4.2、为了完成高亮,需要用到两个事件,onmouseover(鼠标进入) onmouseout(鼠标移出)。

4.3、为了方便可以在遍历行对象时,将每一个对象都进行两个事件属性的指定,并通过匿名函数完成该事件的处理。

4.4、高亮的原理就是将鼠标进入时的颜色改变,改变前先记录住原来行对象的样式。这样在鼠标离开时,可以将原样式还原。

4.5、该样式需要在页面加载完后直接显示,所以使用的window.onload事件来完成。

CODE:表格行颜色间隔显示并高亮显示指定行

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
 	<script type="text/javascript" src="docTool.js"></script>
<link rel="stylesheet" href="sorttab.css" />
    
    <style type="text/css">
.one{
background-color:#66FFFF;
}
.two{
background-color:#CCCCCC;
}
.over{
background-color:#00CC66;
}
    </style>
    
    <script type="text/javascript">
var colorName ="";
function trColor()
{
var tabNode = byTag("table")[0];
var trNodes = tabNode.rows;
for(var x = 1 ; x<trNodes.length ; x++)
{
if(x%2==1)
{
trNodes[x].className = 'one';
}
else
{
trNodes[x].className = 'two';
}
//给行注册事件,用this指针
trNodes[x].onmouseover = function(){
colorName = this.className;
//alert(colorName);
this.className = 'over';
}
trNodes[x].onmouseout  = function(){
this.className = colorName;
}
}
}
window.onload = trColor;
    </script>
</head>
<body>
<table>
    	<tr>
        	<th>姓名</th>
<th>年龄</th>
<th>地址</th>
        </tr>
        
        <tr>
        	<td>黄亮</td>
            <td>25</td>
            <td>株洲</td>
        </tr>
        
        <tr>
        	<td>李波</td>
            <td>5</td>
            <td>永州</td>
        </tr>
        
        <tr>
        	<td>冯志</td>
            <td>29</td>
            <td>湘潭</td>
        </tr>
        
        <tr>
        	<td>戴亮</td>
            <td>22</td>
            <td>长沙</td>
        </tr>
        
        <tr>
        	<td>周正举</td>
            <td>24</td>
            <td>娄底</td>
        </tr>
        
        <tr>
        	<td>孙俪</td>
            <td>34</td>
            <td>北京</td>
        </tr>
        
         <tr>
        	<td>黄亮</td>
            <td>25</td>
            <td>株洲</td>
        </tr>
        
        <tr>
        	<td>李波</td>
            <td>5</td>
            <td>永州</td>
        </tr>
        
        <tr>
        	<td>冯志</td>
            <td>29</td>
            <td>湘潭</td>
        </tr>
        
        <tr>
        	<td>戴亮</td>
            <td>22</td>
            <td>长沙</td>
        </tr>
        
        <tr>
        	<td>周正举</td>
            <td>24</td>
            <td>娄底</td>
        </tr>
        
        <tr>
        	<td>孙俪</td>
            <td>34</td>
            <td>北京</td>
        </tr>
    </table>
</body>
</html>


5、完成一个与css手册中一样的示例。

通过下拉菜单选择显示指定样式属性的使用效果。

CODE:下拉菜单选择显示指定样式

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<style type="text/css">
#div1{
background-color:#99CC33;
width:400px;
height:100px;
}
#div2{
background-color:#99CCCC;
width:400px;
}
</style>
    
<script type="text/javascript">
function sel()
{
	var selid = document.getElementById("sleid");
	//alert(selid.nodeName);
	var value = selid.options[selid.selectedIndex ].value;
	//alert(value);
	var div1Node = document.getElementById("div1");
	var div2Node = document.getElementById("div2");
	div1Node.style.textTransform = value;
	div2Node.innerHTML = "text-transform:"+value;
}
</script>
<body>
<div id="div1">
Good Good Study , Day Day Up !
</div>
<br/>
<select id="sleid" οnchange="sel()">
    <option value="none">--none--</option>
    <option value="uppercase">大写</option>
    <option value="lowercase">小写</option>
</select>
<p></p>
<div id="div2">
text-transform:none
</div>
</body>
</html>



6、表单中的组件

单选框,复选框。

这两个组件都有一个属性来表示其选中与否的状态。Checked

完成一个对多个复选框进行全选的操作。


思路:

将全选那个复选框的checked状态赋给所有的其他checkbox即可。

CODE:练习全选

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript" src="docTool.js"></script>
    
<script type="text/javascript">
function getCount()
{
	var items = byName("compute");
	//alert(items.length);
	var sum = 0 ; 
	for(var x = 0 ; x < items.length ; x++)
	{
		if(items[x].checked)
		{
			sum += parseInt(items[x].value);
		}
	}
	var str = sum + "元";
	var spanNode = byId("countid");
	spanNode.innerHTML = str.fontsize(5);
}
function checkAll(allNode)
{
	var computeNodes = byName("compute");
	for(var x = 0 ; x < computeNodes.length ; x++)
	{
		computeNodes[x].checked = allNode.checked;
	}
}
</script>
</head>
<body>
<input type="checkbox" name="all" οnclick="checkAll(this)"/>全选<br />
    <input type="checkbox" name="compute" value="2000" />笔记本电脑:2000元<br />
    <input type="checkbox" name="compute" value="3000" />笔记本电脑:3000元<br />
    <input type="checkbox" name="compute" value="3500" />笔记本电脑:3500元<br />
    <input type="checkbox" name="compute" value="3800" />笔记本电脑:3800元<br />
    <input type="checkbox" name="compute" value="3000" />笔记本电脑:3000元<br />
    <input type="checkbox" name="compute" value="5000" />笔记本电脑:5000元<br />
    <input type="checkbox" name="compute" value="6000" />笔记本电脑:6000元<br />
    <input type="checkbox" name="compute" value="7000" />笔记本电脑:7000元<br />
    <input type="checkbox" name="compute" value="12000" />笔记本电脑:12000元<br />
    <input type="checkbox" name="compute" value="10000" />笔记本电脑:10000元<br />
    <input type="checkbox" name="all" οnclick="checkAll(this)"/>全选<br />
    <input type="button" value = "获取总金额" οnclick="getCount()"/><span id="countid"></span>
</body>
</html>

7、获取鼠标的坐标,让指定区域随着鼠标移动。

获取鼠标坐标:event.x , event.y

指定区域随鼠标移动其实就是改变了指定区域的left top 属性的值。

这里需要用到的事件:body对象的onmousemove事件。

还需要用到一个css样式,直接定义页面,所以区域都在同一层次,

为了对某一个区域进行定位,将该区域分离到另一个层次,用到css中position属性。



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值