DOM笔记二

1:完成一个好友菜单展开闭合操作

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<style type="text/css">
	/*对ul进行定义,去除内边距和前面的符号*/
	table ul{
	margin: 0px;
	list-style: none;
	padding: 0px;
	background-color: #9955ff;
	display: none;
	}
	/*对表格框线和单元格框线进行定义*/
	table {
	border: #8080ff 1px solid;
	width: 80px;
	}
	table td{
	border: #8080ff 1px solid; 
	background-color: #f3c98f;   
	}
	/*表格中的超链接样式定义*/
	table td a:link,table td a:visited {
	color: #1f6dfd1;
	text-decoration: none; 
	}
	/*超链接点击效果*/
	table td a:hover{
	color: #df4011;
	}	
	/*预定义样式*/
	.open{
	display: block;
	}
	.close{
	display: none;
	}	
	</style>

</head>
<body>

	<!-- 完成一个好友菜单展开闭合操作 -->
	
	<script type="text/javascript">
	function flist(node){
		/*
		获取列表节点ul:
		1.通过参数获取a节点对象;
		2.获取a的父节点td;
		3.通过使用getElementsByTagName()方法获去ul节点。
			(容器型节点都有这种方法)
		*/
		//通过参数获取a节点对象;获取a的父节点td;
		var otdNode=node.parentNode;
		//通过使用getElementsByTagName()方法获取当前ul节点。
		var oulNode=otdNode.getElementsByTagName("ul")[0];
		//alert(oulNode.nodeName);
		
		//获取所有的ul节点
		var otableNode=document.getElementById("tableid");
		var oulNodes=otableNode.getElementsByTagName("ul");
		
		for(var x=0;x<oulNodes.length;x++){
			if(oulNodes[x]==oulNode){
				if(oulNodes[x].className=="open")
					oulNodes[x].className="close";
				else
					oulNodes[x].className="open"
			}
			else
				oulNodes[x].className="close";			
		}	
	}
	
	</script>
	<table id="tableid">
		<tr>
			<td>
				<a href="javascript:void(0)" onclick="flist(this)">好友列表</a>
				<ul>
					<li>张三好友</li>
					<li>张三好友</li>
					<li>张三好友</li>
					<li>张三好友</li>				
				</ul>
			</td>
		</tr>
		<tr>
			<td>
				<a href="javascript:void(0)" onclick="flist(this)">好友列表</a>
				<ul>
					<li>张三好友</li>
					<li>张三好友</li>
					<li>张三好友</li>
					<li>张三好友</li>				
				</ul>
			</td>
		</tr>
		<tr>
			<td>
				<a href="javascript:void(0)" onclick="flist(this)">好友列表</a>
				<ul>
					<li>张三好友</li>
					<li>张三好友</li>
					<li>张三好友</li>
					<li>张三好友</li>				
				</ul>
			</td>
		</tr>
		<tr>
			<td>
				<a href="javascript:void(0)" onclick="flist(this)">好友列表</a>
				<ul>
					<li>张三好友</li>
					<li>张三好友</li>
					<li>张三好友</li>
					<li>张三好友</li>				
				</ul>
			</td>
		</tr>
	</table>
	
</body>
</html>

2:需求:新闻字体中大、小、中样式的改变

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<style type="text/css">
	
		a:link,a:visited {
		color: #oo44ff;
		text-decoration: none; 
		}
		a:hover {
		background-color: white;
		color: red;
		font-size: 24px;
		}		
		#newsid{
		border: #FF00FF 1px solid;
		width: 400px;
		padding: 10px;
		}
			
	</style>
	
</head>
<body>
	<!-- 
	需求:新闻字体中大、小、中样式的改变
	思路:
	1、首先定义新闻文本,用标签封装
	2、定义事件源和事件
	时间源:超链接 a;
	事件:onclick()
	被处理的节点:div-newsid
	
	既然要给超链接自定义事件,就要取消超链接默认的点击效果
	在href中写入:javascript:void(0)
	-->	
	
	<script type="text/javascript">

	function changefont(size){
		//获取div节点的对象
		var oNews=document.getElementById("newsid");
		//利用该对象改变style属性
		oNews.style.fontSize=size;
	}

	</script>
	 
	<h1>安倍走了 下一步中日关系怎么走?</h1>	
	<hr/>
	<a href="javascript:void(0)" onclick="changefont('28px')">大字体</a>	
	<a href="javascript:void(0)" onclick="changefont('16px')">中字体</a>	
	<a href="javascript:void(0)" onclick="changefont('12px')">小字体</a>	
		
	<div id="newsid">
	日本第48届众院选举22日举行投票,当天开始计票。23下午,465个议席已全部确定。
	其中,执政党310个,在野党155个。
	鉴于在日本众院选举中获得了超过三分之二的议席数,自民、公明两党23日确认将在11月1日召集特别国会,
	当天经过首相指名选举组建第四届安倍内阁。
	这次选举胜利再次证明安倍政治上的应变能力。今年夏天他的支持率一度跌破30%,已经到了执政的危险线。
	但是他抓住朝鲜发射导弹的机会,成功拉升了日本社会的危机感,使自己的支持率重回50%以上。
	接下来他又“乘胜追击”,解散众院提前举行大选,现在看来他“赌赢了”。
	</div>	
	
		
</body>
</html>

如果根据用户点击所需要的效果不唯一。
    仅通过传递多个参数虽然可以实现效果
    但是:
    1.传参太多
    2.js代码和css耦合性高
    3.不利于扩展  
    解决:
    将多个所需的样式进行封装。
    封装到选择器中,只要给定指定的标签加载不同的选择器就可以了。 
    预定义一些样式封装到选择器,一般使用类选择器。因为优先级低。

@charset "UTF-8";
a:link,a:visited {
		color: #oo44ff;
		text-decoration: none; 
		}
a:hover {
		background-color: white;
		color: red;
		font-size: 24px;
		}		
#newsid{
		border: #FF00FF 1px solid;
		width: 400px;
		padding: 10px;
		}
.norm{
	color:#000000;
	font-size:16px;
	background-color:#cdd8d0;
	}
.max{
	color:#808080;
	font-size:28px;
	background-color:#9ce9b4;
	}
.min{
	color:#00ff00;
	font-size:12px;
	background-color:#804040;
	}
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<link rel="stylesheet" href="1.css" type="text/css"/>
</head>
<body>
	
	<script type="text/javascript">
	/*
	如果根据用户点击所需要的效果不唯一。
	仅通过传递多个参数虽然可以实现效果
	但是:
	1.传参太多
	2.js代码和css耦合性高
	3.不利于扩展
	
	解决:
	将多个所需的样式进行封装。
	封装到选择器中,只要给定指定的标签加载不同的选择器就可以了。
	
	预定义一些样式封装到选择器,一般使用类选择器。因为优先级低。
	*/
	function changefont(checkter){
		//获取div节点的对象
		var oNews=document.getElementById("newsid");
		//利用该对象改变style属性
		oNews.className=checkter ;
	}

	</script>
	
	<h1>安倍走了 下一步中日关系怎么走?</h1>	
	<hr/>
	<a href="javascript:void(0)" onclick="changefont('max')">大字体</a>	
	<a href="javascript:void(0)" onclick="changefont('norm')">中字体</a>	
	<a href="javascript:void(0)" onclick="changefont('min')">小字体</a>	
		
	<div id="newsid" class="norm">
	日本第48届众院选举22日举行投票,当天开始计票。23下午,465个议席已全部确定。
	其中,执政党310个,在野党155个。
	鉴于在日本众院选举中获得了超过三分之二的议席数,自民、公明两党23日确认将在11月1日召集特别国会,
	当天经过首相指名选举组建第四届安倍内阁。
	这次选举胜利再次证明安倍政治上的应变能力。今年夏天他的支持率一度跌破30%,已经到了执政的危险线。
	但是他抓住朝鲜发射导弹的机会,成功拉升了日本社会的危机感,使自己的支持率重回50%以上。
	接下来他又“乘胜追击”,解散众院提前举行大选,现在看来他“赌赢了”。
	</div>	
</body>
</html>

3. 需求:写一个展开列表

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

	<style type="text/css">
	dl dd{
	margin: 0px;
	}
	dl{
	height: 20px;
	}
	.open{
	height: 90px;
	}
	.close{
	overflow: hidden; 
	}
	
	dl dt{
			color:#ff00ff;
		 }
	
	</style>
	
	<script type="text/javascript">
	var flag=true;
	function list1(){	
		
		//1.获取dl节点对象
		var odlNode=document.getElementsByTagName("dl")[0];
	
		//2.改变节点的样式属性值。
		if(flag){
			odlNode.style.overflow="visible";
			flag=false;
		}else{
				odlNode.style.overflow="hidden";
				flag=true;
		}
	}
	
	//通过预定义样式改变列表,降低css和js的耦合性
	function list2(){
		//1.获取dl节点对象
		var odlNode=document.getElementsByTagName("dl")[0];
		//2.改变class的属性值
		
		if(odlNode.className=="close")
			{
			
			odlNode.className="open"
			}
		else
			{
			odlNode.className="close"
			}
	}
	//多个列表
	function list3(node){
		//获取dl节点
		var odlNode=node.parentNode;
		//改变dl节点的className属性值
		if(odlNode.className=="close")
			{
			
			odlNode.className="open"
			}
		else
			{
			odlNode.className="close"
			}
	}
	
	//多个列表只显示一个
	function list4(node){
		/*
		思路:获取当前dl标签,获取所有dl标签
		让当前标签打开,让其他标签关闭
		*/
		//获取当前dl节点		
		var odlNode=node.parentNode;
		//获取所有dl标签
		var odlNodes=document.getElementsByTagName("dl");
		for(var x=0;x<odlNodes.length;x++){
			
			if(odlNodes[x]==odlNode){
				if(odlNode.className=="close")
				{			
				odlNode.className="open"
				}
				else
				{
				odlNode.className="close"
				}
			}
			else
				{
				odlNodes[x].className="close";
				}
		}
	}
	</script>

</head>
<body>
	<!--
	 需求:写一个展开列表
	 思路:
	 1.先把列表写出来,用html封装;
	 2.用css进行样式的添加;
	 3.定义事件源,事件,以及要处理的节点,dom;
	 4.进行事件的处理。用js。
	 -->
	
	<!--  dl style="overflow: hidden;"-->
	<dl class="close">
		<dt onclick="list4(this)">产品1</dt>
		<dd>dwm1000</dd>
		<dd>dwm1001</dd>
		<dd>dwm1002</dd>
		<dd>dwm1003</dd>
	</dl>
	<dl class="close">
		<dt onclick="list4(this)">产品2</dt>
		<dd>dwm1000</dd>
		<dd>dwm1001</dd>
		<dd>dwm1002</dd>
		<dd>dwm1003</dd>
	</dl>
	<dl class="close">
		<dt onclick="list4(this)">产品3</dt>
		<dd>dwm1000</dd>
		<dd>dwm1001</dd>
		<dd>dwm1002</dd>
		<dd>dwm1003</dd>
	</dl>
	
	
</body>
</html>

4.创建表格,使用一个按钮来创建表格。rows所有的行,cols所有的列,一行中cells所有的单元格

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<style type="text/css">
	table {
		border: #8080ff 1px solid;
		border-style:solid;
	}
	table td{
	border: #8080ff 1px solid; 
	background-color: #f3c98f;   
	}
	</style>

</head>
<body>

	<!-- 
	创建表格,使用一个按钮来创建表格。rows所有的行,cols所有的列,一行中cells所有的单元格
	-->
	
	<script type="text/javascript">
		function creatable(){
			/*使用过去的方法,使用creatElement()方法*/
			//1.创建表格节点
			var otableNode=document.createElement("table");
			//2.创建tbody节点
			var otbodyNode=document.createElement("tbody");
			//3.创建tr节点
			var otrNode=document.createElement("tr");
			//4.创建td节点
			var otdNode=document.createElement("td");
			//在td节点写入内容
			otdNode.innerHTML="这是单元格";
			otrNode.appendChild(otdNode);
			otbodyNode.appendChild(otrNode);
			otableNode.appendChild(otbodyNode);
			document.getElementsByTagName("div")[0].appendChild(otableNode);		
		}
		
		/*
		上面的方法很麻烦,既然是操作表格,
		那么最方便的是使用表格节点的对象方法来完成。
		
		表格是由行组成的。表格节点对象中的insertRow方法就完成创建并添加的动作。
		行是由单元格组成的,通过tr节点对象的insertCell来完成。	
		*/
		
		function crtTable(){
			alert("jaja");
			//1.创建表格节点
			var otableNode=document.createElement("table");
			otableNode.id="idtable";
		  //  otableNode.setAttribute("id","idtable");
			//创建行
			//获取行列数
			var rownum=parseInt(document.getElementsByName("rows")[0].value);
			var collsnum=parseInt(document.getElementsByName("colls")[0].value);
	
			for(var x=1;x<=rownum;x++){
				var otrNode=otableNode.insertRow();
				//创建单元格
				for(var y=1;y<=collsnum;y++){
					var otdNode=otrNode.insertCell();				
					otdNode.innerHTML=x+"--"+y;
				}
			}
			document.getElementsByTagName("div")[0].appendChild(otableNode);
			
			document.getElementsByName("inputname")[0].disabled=true;		
		}
		//删除行
		function deletRow(){
			var otableNode=document.getElementById("idtable");
			if(otableNode==null){
				alert("表格不存在");
			}		
			var valuerow=document.getElementsByName("delrow")[0].value;		
			if(valuerow>=1&&valuerow<=otableNode.rows.length){
				otableNode.deleteRow(valuerow-1);
			}
			else
				alert("该行不存在");			
		}
		//删除列
		function deletCol(){
			var otableNode=document.getElementById("idtable");
			if(otableNode==null){
				alert("表格不存在");
			}		
			var valuecol=document.getElementsByName("delcol")[0].value;
			if(valuecol>=1&&valuecol<=otableNode.cells.length)
			{
			for(var x=1;x<=otableNode.rows.length){
				otableNode.rows[x].deleteCell(valuecol-1);	
			}
			else
				alert("该列不存在");
			}			
		}		
	</script>
	
	
	行:<input type="text" name="rows"/>列:<input type="text" name="colls"/>
	<input type="button" value="创建一个表格" name="inputname" onclick="crtTable()"/>
	<hr/>
	
	删除行:<input type="text" name="delrow"/> <input type="button" value="删除行" onclick="deletRow()"/><br/>
	删除列:<input type="text" name="delcol"/> <input type="button" value="删除列"  onclick="deletCol()"/>
	<div>
	</div>
</body>
</html>

5.表格行颜色悬停高亮 ,每行颜色不同

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>

	<style type="text/css">
	table {
		border: #8080ff 1px solid;
		border-style:solid;
	}
	table td{
	border: #8080ff 1px solid; 
	}
	table th{
	border: #8080ff 1px solid; 
	}
	.one{
	background-color: #aaffcc;
	}
	.two{
	background-color: #aa00ff;
	}
	.over{
	background-color: #ffaa00;
	}
	</style>
	
	<script type="text/javascript">
	
	var name;//记录变化前的颜色
	function trcolor(){
		var oTableNode=document.getElementById("tableid");
		var oTrNodes=oTableNode.rows;
		for(var x=1;x<oTrNodes.length;x++){
			if(x%2==1)
				oTrNodes[x].className="one";
			else
				oTrNodes[x].className="two";
			oTrNodes[x].onmouseover=function(){
				name=this.className;
				this.className="over"
			}
			oTrNodes[x].onmouseleave=function(){
				this.className=name;
			}
		}	
	}
	onload=function(){
		trcolor();
	}
	/*
	//鼠标悬停令其高亮
	function overcolor(node){
		name=node.className;
		node.className="over"
	}
	//鼠标过后恢复正常
	function endcolor(node){
		node.className=name;
	}
	*/
	
	</script>

</head>
<body>
	<!-- 表格行颜色悬停高亮 ,每行颜色不同-->

	<table id="tableid">
		<tr>
			<th>姓名</th>
			<th>年龄</th>
			<th>地址</th>			
		</tr>
		<tr >
			<td>张三</td>
			<td>22</td>
			<td>广东</td>
		</tr>
		<tr>
			<td>李四</td>
			<td>63</td>
			<td>上海</td>
		</tr>
		<tr>
			<td>王五</td>
			<td>32</td>
			<td>深圳</td>
		</tr>
		<tr>
			<td>赵四</td>
			<td>91</td>
			<td>铁岭</td>
		</tr>
		<tr>
			<td>大山</td>
			<td>28</td>
			<td>奉天</td>
		</tr>

	</table>
	
</body>
</html>

6.对表格中的年龄年龄进行排序

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
	<style type="text/css">
		table {
			border: #8080ff 1px solid;
			border-style:solid;
		}
		table td{
		border: #8080ff 1px solid; 
		}
		table th{
		border: #8080ff 1px solid; 
		}
		th a:link,th a:visited{
		 color: #279afd;
		 text-decoration: none;
		 }		
	</style>
	
	<script type="text/javascript">
	/*
	思路:
	1.获取要排序的行节点,第一行不用参与排序;
	2.对要排序的行节点中的第二个单元格进行排序;
	3.把排序好的行节点添加到表格中。
	*/
	var flag = true;
	function sortlist() {
        var oTableNode = document.getElementById("tableid");
        var oTrNodes = oTableNode.rows;
        var arr = [];
        for (var x = 1; x < oTrNodes.length; x++) {
            arr[x - 1] = oTrNodes[x];
        }
        sortArr(arr);
        //把排序好的行节点对象数组插入到表中
        if (flag)
            for (var i = 0; i < arr.length; i++) {
                arr[i].parentNode.appendChild(arr[i]);
                flag=false;
            }
		else {
            for (var i = arr.length - 1; i >= 0; i--) {
                arr[i].parentNode.appendChild(arr[i]);
                flag=true;
            }
        }
    }
	//排序函数
	function sortArr(arr){
		var temp;
		for(var x=0;x<arr.length-1;x++)
			for(var y=x+1;y<arr.length;y++){
				if(parseInt(arr[x].cells[1].innerHTML)>parseInt(arr[y].cells[1].innerHTML)){
					temp=arr[x];
					arr[x]=arr[y];
					arr[y]=temp;										
				}	
			}	
	}
	
	</script>
	
</head>
<body>
	
	<!-- 对表格中的年龄年龄进行排序 -->
	
	<table id="tableid">
		<tr>
			<th>姓名</th>
			<th><a href="javascript:void(0)"onclick="sortlist()">年龄</a></th>
			<th>地址</th>			
		</tr>
		<tr >
			<td>张三</td>
			<td>22</td>
			<td>广东</td>
		</tr>
		<tr>
			<td>李四</td>
			<td>63</td>
			<td>上海</td>
		</tr>
		<tr>
			<td>王五</td>
			<td>32</td>
			<td>深圳</td>
		</tr>
		<tr>
			<td>赵四</td>
			<td>91</td>
			<td>铁岭</td>
		</tr>
		<tr>
			<td>大山</td>
			<td>28</td>
			<td>奉天</td>
		</tr>

	</table>
	
</body>
</html>

7.全选商品列表

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	
	<!-- 全选商品列表 -->
	<script type="text/javascript">
	//求和函数
	function summony(){
		var sum=0;
		var oCheckNodes=document.getElementsByName("item");
		for(var x=0;x<oCheckNodes.length;x++){
			if(oCheckNodes[x].checked==true)
				sum+=parseInt(oCheckNodes[x].value);	
		}
		var sSum=sum+"元";
		document.getElementById("spanid").innerHTML=sSum.fontcolor("red");
	}
	//全选函数
	function allcheck(node){
		//思路:把所有的alltem的checked和item的checked设置成一致
		var oCheckNodes=document.getElementsByName("item");
		for(var x=0;x<oCheckNodes.length;x++){
			oCheckNodes[x].checked=node.checked;				
		}	
	}

	</script>
	
	<input type="checkbox" name="alltem" onclick="allcheck(this)"/>全选<br/>
	<input type="checkbox" name="item" value="4000"/>笔记本电脑<br/>
	<input type="checkbox" name="item" value="4000"/>笔记本电脑<br/>
	<input type="checkbox" name="item" value="4000"/>笔记本电脑<br/>
	<input type="checkbox" name="item" value="4000"/>笔记本电脑<br/>
	<input type="checkbox" name="item" value="4000"/>笔记本电脑<br/>
	<input type="checkbox" name="item" value="4000"/>笔记本电脑<br/>
	<input type="checkbox" name="item" value="4000"/>笔记本电脑<br/>
	<input type="checkbox" name="alltem" onclick="allcheck(this)"/>全选<br/>
	<input type="button" value="价格" onclick="summony()"/><span id="spanid"></span>

</body>
</html>

猜你喜欢

转载自blog.csdn.net/TDOA1024/article/details/83626697