DOM(二)-06-(示例-好友菜单)

<!--
DOM示例-好友菜单

类似QQ面板功能,若3个好友分组,单击第一个分组会显示该组成员,即菜单下拉,然后单击第二个分组,第一个分组会自动收起,且第二个分组
会顶格,不再像之前做的列表那样列表头不动。
-->

<!-- 【注意】程序中重难点部分会详细注释说明,其余如css样式,前期数据分布安排等不再说明 -->

<html>
	<head>
		<style type="text/css">
			
			/*对表格中的ul进行样式定义*/
			
			table ul{/*关联选择器*/
				list-style:none;/*去除无序列表的样式*/
				margin:0px;/*ul中内容左边顶格*/
				background-color:#26e356;
				/*
				 *打开CSS API,找到布局里面的display,其中有好多值,none可以用于隐藏对象,所以display:none功能类似于之前
				 *讲过的overflow:hidden。
				 */
				display:none;
				
				padding:0px;/*这行代码是为了兼容火狐浏览器,因为火狐每一项属性都要设置,而IE会有一些默认属性*/
			}
			
			/*对表格框线进行定义,以及单元格的框线进行定义*/
			
			table{
				border:#8080ff 1px solid;/*宽度1px,实线*/
				width:100px;
			}
			table td{
				border:#8080ff 1px solid;
				background-color:#f3c98f;
			}
			
			/*单元格中的超链接样式:单击前,单击后都一样*/
			
			table td a:link,table td a:visited{/*组合选择器*/
				color:#1f6df1;
				text-decoration:none;/*去下划线*/
			}
			
			table td a:hover{/*设置超链接在鼠标悬停时候的效果*/
				color:#df4011;
			}
			
			/*预定义一些样式,详见CSS API中的布局中的display*/
			.open{
				display:block;/*类似overflow:visible*/
			}
			
			.close{
				display:none;/*类似overflow:hidden*/
			}
		</style>
	</head>
	<body>
		<script type="text/javascript">
		
			function list(node){//定义onclick事件处理办法
				
				/*
				 *获取被操作的节点ul,因为οnclick="list(this)"是在a节点中,所以先用a拿到其父节点,然后用该父节点获取
				 *ul节点(由于火狐浏览器不支持直接拿下一个兄弟节点,且之前也讲过不建议用兄弟节点,所以这里不这么做)
				 */
				
				var oTdNode = node.parentNode;//通过当前被鼠标单击的节点对象获取其父节点td
				/*
				 *td是容器型标签,容器型标签中都具备根据标签名获取节点的方法
				 *通过td节点获取其内的ul节点,这个ul节点即为当前需要被操作的节点A
				 */
				var oUlNode = oTdNode.getElementsByTagName("ul")[0];
				
				//希望每次只开一个列表且关闭其他,即第一次开列表一,然后开列表二,此时列表一被自动关闭
				//获取表格中所有ul,先获取表格节点对象
				var oTableNode = document.getElementById("goodlist");//获取table节点对象
				var collUlNodes = oTableNode.getElementsByTagName("ul");//获取table中的所有ul节点对象
				
				for(var x=0;x<collUlNodes.length;x++){//遍历table中的所有ul节点
					
					if(collUlNodes[x] == oUlNode){//如果被遍历到的节点是A,那么进行“展开”和“收起”操作
						
						if(oUlNode.className == "close")//如果A现在是close状态
							oUlNode.className = "open";//那就将其open
						else//否则A现在是open状态
							oUlNode.className = "close";//那就将其close
						
					}else{//否则被遍历到的节点不是A,说明该节点不需要被操作,即不需要展开
						
						collUlNodes[x].className = "close";//那么直接将其close
						
					}
					
				}
				
			}
		
		</script>
		
		<table id="goodlist">
			<tr>
				<td>
					<a href="javascript:void(0)" οnclick="list(this)">好友菜单一</a>	<!-- 取消超链接的默认点击效果,详细解释见34-DOM-01 -->
					<ul class="close">	<!-- 用列表标签来完成 -->
						<li>张三1</li>
						<li>李四1</li>
						<li>王五1</li>
						<li>赵六1</li>
					</ul>
				</td>
			</tr>
			<tr>
				<td>
					<a href="javascript:void(0)" οnclick="list(this)">好友菜单二</a>
					<ul class="close">	
						<li>张三2</li>
						<li>李四2</li>
						<li>王五2</li>
						<li>赵六2</li>
					</ul>
				</td>
			</tr>
			<tr>
				<td>
					<a href="javascript:void(0)" οnclick="list(this)">好友菜单三</a>
					<ul class="close">
						<li>张三3</li>
						<li>李四3</li>
						<li>王五3</li>
						<li>赵六3</li>
					</ul>
				</td>
			</tr>
			<tr>
				<td>
					<a href="javascript:void(0)" οnclick="list(this)">好友菜单四</a>
					<ul class="close">
						<li>张三4</li>
						<li>李四4</li>
						<li>王五4</li>
						<li>赵六4</li>
					</ul>
				</td>
			</tr>
		</table>
	</body>
</html>

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值