【问题标题】:Jquery display all subnav of parentJquery显示父级的所有子导航
【发布时间】:2015-01-27 16:51:32
【问题描述】:


如何显示父菜单并显示所有子导航? 例如: 当我先单击并向下滑动这些子导航时 first-1 first-1-1 first-1-2 ......

一如既往,感谢您的帮助!

http://jsfiddle.net/MotoTony/kg8x2ntv/

HTML:

<nav id="nav">
    <ul class="nav">
        <li class="parent">
            <a href="#">first</a>
            <ul class="nav-child">
                <li>
                    <a href="#">first-1</a>
                    <ul class="nav-child">
                        <li><a href="#">first-1-1</a></li>
                        <li><a href="#">first-1-2</a></li>
                        <li><a href="#">first-1-3</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li class="parent">
            <a href="#">2</a>
            <ul class="nav-child">
                <li>
                    <a href="#">first-1</a>
                    <ul class="nav-child">
                        <li><a href="#">2-1-1</a></li>
                        <li><a href="#">2-1-2</a></li>
                        <li><a href="#">2-1-3</a></li>
                    </ul>
                </li>
            </ul>
        </li>
        <li class="parent">
            <a href="#">3</a>
            <ul class="nav-child">
                <li>
                    <a href="#">first-1</a>
                    <ul class="nav-child">
                        <li><a href="#">3-1-1</a></li>
                        <li><a href="#">3-1-2</a></li>
                        <li><a href="#">3-1-3</a></li>
                    </ul>
                </li>
            </ul>
        </li>
    </ul>
</nav>


jQuery:

function initMenu() {
    jQuery('.nav-child').hide(); // Start with nav-childs hidden
    jQuery('.nav > li.parent a').click(function() {
      var checkElement = jQuery(this).next();

      // When an `<a>` with a nav-child that isn't visible is clicked (tapped)...
      if ((checkElement.is('.nav-child')) && (!checkElement.is(':visible'))) {
            // Open the clicked (tapped) nav-child of `<a>`
            jQuery(this).addClass("active");
            checkElement.slideDown(165, 'linear');
            // Go to the other `<a>` elements of that nav-child scope and close them
            // (without closing nav-childs of other scopes, above or below)
            jQuery(this).parent().siblings("li").children("a").removeClass("active");
            jQuery(this).parent().siblings("li").children("a").next(".nav-child").slideUp(160, 'linear');
            return false;
      }

      if(jQuery(this).hasClass("active")) {
            jQuery(this).removeClass("active");
            checkElement.slideUp(160, 'linear');
      }
    });
  } // End initMenu()

initMenu();

我想先点击,然后 first-1 和孩子 first-1-1 first-1-2...同时显示,当我点击 first-1 或任何 subnav 不滑动时,只需点击首先它可以向上滑动所有子导航。然后,当我单击导航子之外的任何位置时,所有导航子都会向上滑动

【问题讨论】:

    标签: jquery slide nav


    【解决方案1】:

    尝试做类似的事情

    function initMenu() {
        jQuery('.nav-child').hide(); // Start with nav-childs hidden
        jQuery('.nav > li.parent a').click(function() {
          var checkElement = jQuery(this).next();
          var $uls = $(this).next().find('.nav-child').addBack().slideToggle(160, 'linear');
          $uls.prev('a').toggleClass('active');
    
          $(this).parent().siblings().find('.nav-child').slideUp(160, 'linear').prev().removeClass('active')
        });
      } // End initMenu()
    
    initMenu();
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <nav id="nav">
      <ul class="nav">
        <li class="parent">
          <a href="#">first</a>
          <ul class="nav-child">
            <li>
              <a href="#">first-1</a>
              <ul class="nav-child">
                <li><a href="#">first-1-1</a></li>
                <li><a href="#">first-1-2</a></li>
                <li><a href="#">first-1-3</a></li>
              </ul>
            </li>
          </ul>
        </li>
        <li class="parent">
          <a href="#">first</a>
          <ul class="nav-child">
            <li>
              <a href="#">first-1</a>
              <ul class="nav-child">
                <li><a href="#">first-1-1</a></li>
                <li><a href="#">first-1-2</a></li>
                <li><a href="#">first-1-3</a></li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </nav>

    【讨论】:

    • 先生,您能帮我检查一下 jsfiddle 有什么问题吗?当我再次单击第一个菜单时,幻灯片不起作用..jsfiddle.net/MotoTony/eruLu2po
    • @John 对不起,可能我解释得不够清楚,我想要先点击,然后是 first-1 和 children first-1-1 first-1-2...显示相同时间,当我点击 first-1 或任何 subnav 不滑动时,只需先点击它就可以滑动所有 subnav。然后,当我点击 nav-child 之外的任何地方时,所有 nav-child 都会向上滑动,你的例子只有2 级子导航,但我想要 3 级子导航,在这里更正 jsfiddle 更新:jsfiddle.net/MotoTony/eruLu2po/,and 有问题,当我再次单击时,滑动不起作用
    • @John 但我只想单击“第一个”,它可以在您的代码中向上滑动所有 subnav.in,当我单击 first-1-1-1 时,它仍然是 first-1-1-1 向上滑动-1 和其他人,顺便说一句,我发现有一些 html 代码错误,我已经在这里用你的 jquery 代码更正了:jsfiddle.net/MotoTony/eruLu2po/5,感谢你的耐心!
    • @MotoTony 所以当你点击first-1-1-1 会发生什么?什么都不应该卷起来?
    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-09
    相关资源
    最近更新 更多