我对jquery比较新,我正在寻求帮助。目的是单击附加到ul的列表项,并在任何其他列表项消失时显示。只有活动的是可见的
我遇到的问题是,当我点击另一个列表项时,活动的一个消失(按预期),但它不会显示另一个,它仍然是隐藏的。我正在寻找一种方法来揭示列表,同时隐藏那些不活跃的列表。
我上传了我的问题:http://jsfiddle.net/CbU4d/
HTML:
<div id="secondary-nav"><!--secondary-nav-->
<ul>
<li><a href="#.html">Current Article</a>
<ul>
<li><a href="#.html">Example 1</a></li>
</ul>
</li>
<li class="active"><a href="#.html">Past Articles</a>
<ul>
<li><a href="#.html">Example 1</a></li>
<li><a href="#.html">Example 2</a></li>
<li><a href="#.html">Example 3</a></li>
</ul>
</li>
</ul>
</div><!--/secondary-nav-->
的CSS:
#secondary-nav {
float:left;
height:auto;
width:23%; /*210px*/
border-right:2px solid #000;
position:relative;
}
/*heading styles*/
#secondary-nav ul li {
padding: 0 10px;
list-style-type: none;
}
#secondary-nav ul li a {
font-family:TrajanPro;
font-size:1em;
line-height: 32px;
color:#000;
}
/*links*/
#secondary-nav ul ul li a {
display: block;
font-family:TrajanPro;
font-size:0.9em;
line-height: 27px;
text-decoration: none;
color:#000;
transition: all 0.15s;
}
#secondary-nav ul li a:hover {
display:block;
color:#af2931;
text-decoration:underline;
}
#secondary-nav ul ul {
display: none;
}
#secondary-nav li.active ul {
display: block;
}
/css
jquery使用1.7.1
$(document).ready(function(){
$("#secondary-nav ul").click(function(){
//slide up all the link lists
$("#secondary-nav ul ul").slideUp();
//slide down the link list below the h3 clicked - only if its closed
if(!$(this).next().is(":visible"))
{
$(this).next().slideDown();
}
})
})
答案 0 :(得分:2)
答案 1 :(得分:-1)
我通过做两处修改来实现它(我认为):
将第2行的选择器更改为:
"#secondary-nav ul li"
这意味着该事件将附加到您单击的列表项,而不是整个列表。
删除第6行的if语句。由于我们隐藏了上一行中第二级ul
的所有,我们无需检查是否它是可见的;我们知道不是。
将第6行更改为:
$(this).children('ul').slideDown();
这是因为您要展开的ul
是您点击的li
的孩子,而不是兄弟姐妹。
编辑:如果您想要在单击已经展开的那个时停止隐藏并重新显示,只需将其放在处理程序的顶部:
if ($(this).children('ul').is(':visible')){
return
}