这里给大家分享的是用样式display实现菜单栏目的展开合并:
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>test</title> <style type="text/css"> /*对表格中的ul进行样式定义1,取出无序列表的样式(无序列表自带样式缩进或者文字前的圆圈)2,去掉外边距*/ table tr td ul { list-style:none; margin:0px; background-color:#FF0; display:none;/*此元素不会显示*/ border:#FC3 1px solid; padding:0px; } /*对表格框线进行定义以及单元格的框线进行定义*/ table { width:80px; } table td { border:#000 1px solid; background-color:#eee; padding:5px; text-align: center; } table tr td a { color:#600; text-decoration:none;/*去掉下划线*/ } table tr td a:hover { color:#CFF; } table tr td a:link,table tr td a:visited { color:#000; text-decoration:none; } .open { display:block;/*块对象的默认值。将对象强制作为块对象呈递,为对象之后添加新行*/ } .open li { padding: 5px; } .close { display:none;/*隐藏对象。与 visibility 属性的hidden值不同,其不为被隐藏的对象保留其物理空间*/ } </style> </head> <body> <script type="text/javascript"> //事件源:超链接 处理对象:ul 处理方式:open,close function list(aNode) { //根据事件源a获取其下一个兄弟ul var ulNode=aNode.nextSibling.nextSibling; //alert(ulNode.nodeName); //遍历所有的ul节点,要通过table var tabNode=document.getElementById("goodlist"); //alert(tabNode.nodeName); var collUlNodes=tabNode.getElementsByTagName("ul")//容器型标签,都含有根据标签名获取节点的方法 for(var x=0;x<collUlNodes.length;x++) { if(collUlNodes[x]==ulNode) { if(ulNode.className=="open") { ulNode.className="close"; } else { ulNode.className="open"; } } else { collUlNodes[x].className="close"; } } } </script> <table id="goodlist"> <tr> <td> <a href="javascript:void(0)" onclick="list(this)">水果</a> <ul class="close"> <li>苹果</li> <li>桃子</li> <li>香蕉</li> <li>草莓</li> </ul> </td> </tr> <tr> <td> <a href="javascript:void(0)"onclick="list(this)" >蔬菜</a> <ul class="close"> <li>黄瓜</li> <li>南瓜</li> <li>白菜</li> <li>土豆</li> </ul> </td> </tr> <tr> <td> <a href="javascript:void(0)"onclick="list(this)" >肉类</a> <ul class="close"> <li>鸡肉</li> <li>鸭肉</li> <li>兔肉</li> <li>鹅肉</li> </ul> </td> </tr> </body> </html>
效果如下:
合并的效果图
点击水果展开的效果图
PS:这里对CSS采用的是style行内式。