简体   繁体   English

如何让我的菜单扩展所有子项?

[英]How can I make my menu expand all the subitems?

I have a list menu with some JavaScript code that makes it collapse and expand .onClick . 我有一个包含一些JavaScript代码的列表菜单,使其崩溃并扩展.onClick

Although I could only make it show 1 item because every time I try a new solution like a for loop or case I can't get it to work. 虽然我只能让它显示1项,因为每次我尝试新的解决方案,如for循环或case我无法让它工作。

This is my current code: 这是我目前的代码:

<ul id="navigation">
    <li class="main"><a>Diagonóstico</a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_di1"> › Grátis (na compra de qualquer serviço) </a></li>
    <li class="main"><a>Hardware</a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ha1"> › Instalação/Configuração de Componentes</a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ha2"> › Instalação/Configuração de Periféricos </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ha3"> › Limpeza interna/externa </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ha4"> › Cooling Pack </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ha5"> › Performance Pack </a></li>
    <li class="main"><a>Software</a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_so1"> › Actualização de Sistema Operativo </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_so2"> › Instalação de Sistema Operativo </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_so3"> › Instalação de Drivers e Aplicações </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_so4"> › Configurações de internet e redes wireless </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_so5"> › Legalize o seu PC </a></li>
    <li class="main"><a>Backup</a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ba1"> › Backup de dados até 4GB </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ba2"> › Backup and Go </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ba3"> › Suportes Danificados </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ba4"> › Recuperação de dados sem intervenção física </a></li>
    <li class="main"><a>Segurança</a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_se1"> › Remoção de Vírus e Spyware </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_se2"> › Instalação de anti-vírus </a></li>
    <li class="sub"><a href="javascript:void(0);" class="sub_se3"> › Configurações de Controlo Parental </a></li>
</ul>
$(function () {
    $("li.sub:not(:first)").hide();
    $("li.main a").click(function () {
        $("li.sub").slideUp("fast");
        $(this).parent("li.main").next("li.sub").slideDown("slow");
    });
});

Here is the jsFiddle for it. 这是jsFiddle

I was thinking about a for loop that goes all the way trough each sub-menu category for instance: 我正在考虑一个for循环,它贯穿每个子菜单类别,例如:

for(var i=1; i<5; i++) {
    $(this).parent("li.main").next("li.sub_ha" + i).slideDown("slow");
}

Then doing this for each main menu giving each of them a class menu1,menu2,menu3 etc. 然后为每个主菜单执行此操作,为每个主菜单提供类menu1,menu2,menu3等。

这应该这样做:

$(this).parent().parent().find("li.sub").slideDown("slow");

next only selects the next sibling of the selected element, you can use nextUntil mehod. next只选择所选元素的下一个兄弟,你可以使用nextUntil

$(this).parent().nextUntil("li.main").slideDown("slow");

http://jsfiddle.net/ruf6z/ http://jsfiddle.net/ruf6z/

$(function() {
    var $subitems = $("li.sub");
    $subitems.not(':first').hide();

    $("li.main a").click(function() {
        var $targets = $(this).parent().nextUntil("li.main").slideDown("slow");
        $subitems.not($targets).slideUp("fast");
    });
});

http://jsfiddle.net/ruf6z/1/ http://jsfiddle.net/ruf6z/1/

It would be better to do this semantically. 在语义上这样做会更好。 If you want to say the course, I would suggest giving each group of child items their own class. 如果你想说这门课程,我会建议给每组儿童用品自己上课。 You can search for the class of the child items, and then use that class to find everything in your subgroup, and then run the .slideDown() method on that group. 您可以搜索子项的类,然后使用该类查找子组中的所有内容,然后在该组上运行.slideDown()方法。

I made a modified version of your fiddle that shows how to do this. 我做了一个改进版的小提琴 ,展示了如何做到这一点。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM