3

我有一个包含 4 个主要项目的菜单,每个项目有 3 到 5 个子项目。

<ul id="navigation">
    <li><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><a>Hardware</a> 
    </li>
    <li class="sub"><a href="javascript:void(0);" class="sub_ha1"> › Instalação/Configuração de Componentes</a>

请检查完整的代码

正如您在 jsFiddle 中看到的那样,所有菜单项在单击时都会在另一个 div 中显示一些文本。我把它放在那里以防需要进一步的 javascript 帮助。我想要的是折叠所有 .sub 菜单,当我将鼠标悬停在其中一个主要菜单上时,它会展开相应的 .sub 项目,以便用户可以看到。谢谢!

编辑:

我设法在其中一个评论中获得了一个不错的教程,并想出了这个

我现在需要的是一种从相应的 .main 菜单中显示所有 .sub 菜单的方法,而不仅仅是第一个菜单。

4

2 回答 2

9

仅使用 HTML 和 CSS。

HTML

<ul id="menu">
    <li><a href="SOME_LINK">Some menu without sub-menu</a></li>
    <li><a href="SOME_LINK2">Some menu without sub-menu 2 </a></li>
    <li>Some menu WITH sub-menu
        <ul>
            <li><a href="SOME_LINK">Some sub-menu</a></li>
            <li><a href="SOME_LINK">Some sub-menu 2</a></li>
        </ul>
    </li>
    <li><a href="SOME_LINK3">Some menu without sub-menu 3</a></li>
</ul>

CSS

ul>li>ul{display:none}
ul>li:hover>ul, ul>li:selected>ul{display:block}

JS (jQuery) 打开所有子菜单

$('#menu li>ul').parent().addClass('selected');

没有 Jquery 的 JS

var menus = document.getElementById('menu').getElementsByTagName('li') 
for(var row in menus){
     if(typeof menus[row] == 'object' && menus[row].getElementsByTagName('ul').length > 0){
         menus[row].getElementsByTagName('ul')[0].className = 'selected';
     }
}
于 2013-04-15T01:31:59.050 回答
1

我的解决方案类似于问题编辑中提到的解决方案,但是单击时已打开的列表项不会重新打开:http: //jsfiddle.net/g5oc0uoq/

$('.content').hide();
$('.listelement').on('click', function(){
  if(!($(this).children('.content').is(':visible'))){
    $('.content').slideUp();
    $(this).children('.content').slideDown();
  } else {
    $('.content').slideUp();
  }
});

如果您遇到性能问题,可以使用 show() 和 hide() 代替 slideUp() 和 slideDown()。

于 2014-08-18T08:45:14.000 回答