【问题标题】:Javascript three-level collapsible menuJavascript 三级可折叠菜单
【发布时间】:2017-02-24 19:44:16
【问题描述】:

我完全是编码爱好者;我想要一个三级可折叠菜单,单击时会展开。我找到了一些可以使用的现有代码,但它仅适用于两级菜单。我无法弄清楚如何更改脚本,以便在单击时也会打开第三级。任何想法都会感激!

这是现有的脚本:

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
   <!-- <script type="text/javascript" language="javascript" charset="utf-8" src="nav.js"></script> -->
<!--[if lt IE 9]>
  <script type="text/javascript" src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->


  <script>
  $(document).ready(function(){
  $("#nav > li > a").on("click", function(e){
    if($(this).parent().has("ul")) {
      e.preventDefault();
    }

    if(!$(this).hasClass("open")) {
      // hide any open menus and remove all other classes
      $("#nav li ul").slideUp(350);
      $("#nav li a").removeClass("open");
      
      // open our new menu and add the open class
      $(this).next("ul").slideDown(350);
      $(this).addClass("open");
    }
    
    else if($(this).hasClass("open")) {
      $(this).removeClass("open");
      $(this).next("ul").slideUp(350);
    }
  });
});
</script>

【问题讨论】:

    标签: javascript multi-level expandable collapsable


    【解决方案1】:

    与现有的代码相比,您可以使用相对较少的代码实现相同的结果。

    使用 css 处理显示可以说更容易管理,使用 javascript 只需切换一个您可以在 css 中定位的类。这也意味着您可以拥有任意多个级别。

    它通过使用 css + 中的下一个兄弟选择器来工作

    $('.menu-trigger').click(function(){
      $(this).toggleClass('active')
      
      // if you really wish to keep the jquery animation you can do this
      // $(this).next('ul').slideToggle()
    })
    /* you can use the sibling selector '+' to target the list */
    .menu-trigger + ul {
      display: none;
    }
    
    .menu-trigger.active + ul {
      display: block;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul>
      <li>
        <a class="menu-trigger">parent</a>
        <ul>
          <li>
            <a class="menu-trigger">child</a>
            <ul>
              <li>
                <a class="menu-trigger">grandchild</a>
              </li>
            </ul>
          </li>
        </ul>
      </li>
    </ul>

    【讨论】:

    • 感谢@synthet1c - 效果很好!尽管我希望避免一次打开多个子菜单(即单击一个时折叠所有其他菜单)。我已经很好地查看了此站点上的类似问题,但没有一个代码对我有用。你有什么建议吗?
    【解决方案2】:

    我写了这个,它很简单,但有点说明你想要实现的目标。

    $('li').hover(function(){
        $(this).children('ul:eq(0)').show();
    }, function(){
        $(this).children('ul:eq(0)').hide();
    });
    

    http://codepen.io/clarenswd/pen/GjBaWp

    【讨论】:

    • 谢谢@clarenswd - 效果很好,虽然我更喜欢在点击时打开子菜单而不是悬停 - 这可以使用您的代码吗?
    猜你喜欢
    • 2011-09-21
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2013-09-08
    • 2019-11-23
    相关资源
    最近更新 更多