<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
*{margin:0;
padding:0;
font-size:13px;
list-style:none;}
.menu{width:210px;
margin:50px auto;
border:1px solid #ccc;}
.menu p{height:25px;
line-height:25px;
font-weight:bold;
background:#eee;
border-bottom:1px solid #ccc;
cursor:pointer;
padding-left:5px;}
.menu div ul{display:none;}
.menu li{height:24px;
line-height:24px;
padding-left:5px;}
</style>
<script type="text/javascript">
window.onload=function(){
// 将所有点击的标题和要显示隐藏的列表取出来
var uls=document.getElementById('menu').getElementsByTagName('ul');
var ps= document.getElementById('menu').getElementsByTagName('p');
// 遍历所有要点击的标题且给它们添加索引及绑定事件
if(uls.length!=ps.length)return;
for (var i=0;i<uls.length;i++){
ps[i].id=[i];
ps[i].onclick=function(){
if(uls[this.id].style.display=='none'){
uls[this.id].style.display='block';
}
else {
uls[this.id].style.display='none';
}
}
}
// 获取点击的标题上的索引属性,根据该索引找到对应的列表
// 判断该列表,如果是显示的则将其隐藏,如果是隐藏的则将其显示出来
}
</script>
</head>
<body>
<div id="menu">
<div>
<p>Web前端</p>
<ul style="display:block">
<li>JavaScript</li>
<li>DIV+CSS</li>
<li>jQuery</li>
</ul>
</div>
<div>
<p>后台脚本</p>
<ul>
<li>PHP</li>
<li>ASP.net</li>
<li>JSP</li>
</ul>
</div>
<div>
<p>前端框架</p>
<ul>
<li>Extjs</li>
<li>Esspress</li>
<li>YUI</li>
</ul>
</div>
</div>
</body>
</html>
通过外链样式和内嵌样式设置元素的display:none样式,用js设置style.display=""并不起作用(通过行内样式设置的会起作用),此时走else给该元素添加了style=display:none;再次点击时js设置样式就起作用了。
将ul的disply:none写成行内样式就可以了,或者将if判断语句那里的顺序改一下,即当点击的元素为显示时将其隐藏,否则显示
window.onload=function(){
var ps = document.getElementById('menu').getElementsByTagName('p');
var uls = document.getElementById('menu').getElementsByTagName('ul');
if (ps.length != uls.length) {
return;
}
for (var i = 0; i < ps.length; i++) {
ps[i].id = i;
ps[i].onclick = function() {
for (var j = 0; j < ps.length; j++) {
uls[j].style.display = 'none';
}
uls[this.id].style.display='block';
}
}
}
我这样可以