我有像
这样的HTML<ul>
<li class="dropdown">text</li>
<li>text</li>
<li>text</li>
<li>text</li>
<li>text</li>
<li class="dropdown">text</li>
<li>text</li>
<li>text</li>
<li class="dropdown">text</li>
<li>text</li>
<li>text</li>
<li>text</li>
</ul>
CSS:
li {display:none;}
li.dropdown {display:block;}
当我们点击li.dropdown
时,所有<li>
没有类,从当前到下一个li.dropdown
,都应该可见。当我们再次点击它时相反的操作 - 隐藏<li>
而没有等级dropdown
。
我该怎么做?
答案 0 :(得分:7)
执行此操作的正确方法是使用子菜单,所以:
<ul>
<li class="dropdown">text
<ul>
<li>text</li>
<li>text</li>
<li>text</li>
<li>text</li>
</ul>
</li>
etc...
</ul>
然后你可以做
$('li.dropdown').click(function() {
$(this).find('ul').slideToggle('slow');
});
否则,您必须使用nextUntil
:
$('li.dropdown').click(function() {
$(this).nextUntil('li.dropdown').slideToggle('slow');
});
这样做的缺点是可以单独隐藏每个嵌套的li
元素,而不是块。如果可以的话,先做第一个。
答案 1 :(得分:2)
我建议使用嵌套列表结构:
<ul>
<li class="dropdown">text
<ul>
<li>text</li>
<li>text</li>
<li>text</li>
<li>text</li>
</ul>
</li>
<li class="dropdown">text
<ul>
<li>text</li>
<li>text</li>
</ul>
</li>
</ul>
像这样创建一个CSS:
li.dropdown ul {
display : none;
}
然后只显示/隐藏嵌套的无序列表:
$('li.dropdown').click(function() {
$(this).children('ul').toggle();
});
答案 2 :(得分:1)
如果你有$ dropdown变量中的项目,那么你可以使用它:
$dropdown.next( "li:not(.dropdown)" ).hide();
这将隐藏所有不是.dropdown;
要执行此操作,直到下一个.dropdown,您需要使用:
$dropdown.next("li").each(...);
答案 3 :(得分:1)
$("li.dropdown").click(function() {
$(this).nextUntil(".dropdown").toggle();
});