包含嵌套链接的CSS / JavaScript / HTML菜单列表

时间:2018-03-19 13:12:10

标签: javascript jquery html css drupal-8

我的页面中有菜单列表,结构如下。当我点击菜单中的任何链接时,系统会自动添加class =" is-active"到链接。我将嵌套链接的 display 设置为 none ,这样只有点击父链接才能看到它们(请参阅css)。但是,当我点击其中一个子链接时,子链接的整个子菜单都会消失。当我使用它们时,如何实现我的孩子链接?我知道我不能用css的孩子影响父母,也许有一些简单的javascript解决方法。

提前谢谢!



.menu-item--expanded ul {display: none;}
.menu-item--expanded a.is-active ~ ul {display: block}

<html>
<body>

<ul>
  <li class="menu-item--expanded">
    <a class="is-active">Link 1</a>
    <ul>
      <li><a href="">Link A</a></li>
      <li><a href="">Link B</a></li>
      <li><a href="">Link C</a></li>
    </ul>
  </li>
  <li class="menu-item--expanded">
    <a>Link 2</a>
    <ul>
      <li><a href="" class="is-active">Link D</a></li>
      <li><a href="">Link E</a></li>
      <li><a href="">Link F</a></li>
    </ul>
  </li>
</ul>

</body>
</html>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:0)

我会在javascript上做这样的事情:

$('li').on('click', function(evt){
    $(evt.target).parent().css('display', 'none');
})

所以当单击列表项时,则设置为display:none,父元素,所以ul。也许检查一下css的设置来检查is-active类,比如:

if($(evt.target).hasClass('is-active')){
 //switch to display none
}

答案 1 :(得分:0)

我建议使用jquery。 以下代码将在单击父级时更改子级ul的显示。

确保子列表是display:none with css。

.menu-item--expanded > ul{
display: none;
}

$('.menu-item--expanded').click(function () {
  $(this).find($('ul')).css({
    'display' : 'block'
  });
});

确保只显示您所在父页面的子项使用以下代码:

注意:实际上不需要else子句,因为你的css已经在这些项目上设置了display none。但我提到它只是为了说清楚。

$('.menu-item--expanded').each(function () {
  if($(this).find($('>a')).hasClass('is-active')){
    $(this).find($('ul')).css({
      'display' : 'block'
    });
  } else {
    $(this).find($('ul')).css({
      'display' : 'none'
    });
  }
});

希望这会有所帮助。