jquery - 由 jquery 控制的多级 html 菜单

标签 jquery html

我遇到了多级菜单问题。我需要 jQuery 来显示或隐藏当前选定的子菜单,并保持其他子菜单不变。我对 JQuery 还不是很熟练,所以非常感谢任何帮助。我在这里与你分享我所拥有的。提前致谢!

我想提一下,我在 StackOverflow 上找到了一个部分有效的示例。经过一些调试后,我意识到 var mobileMenu.css 返回 undefined,这使得代码有时可以正常工作。

var test1 = $('ul.hdrMenu li');

test1.on( 'click', function(e) 
{   
    var mobileMenuItem  = $(e.target).parent().find( '> ul.sub-menu' );

    if( **typeof mobileMenuItem.css('display') === "undefined"** )
    {
        mobileMenuItem  = $(e.target).parent().parent().find( '> ul.sub-menu' );          
    }

    if( mobileMenuItem.css('display') == 'none' ) 
    {
        e.preventDefault();
        mobileMenuItem.slideDown();
        e.stopPropagation();
    } 
    else if( mobileMenuItem.css('display') == 'block' ) 
    {
        e.preventDefault();
        mobileMenuItem.slideUp();
        e.stopPropagation();
    }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="hdrMenu">
  <li><a href="#">Inicio</a></li>
  <li><a href="#">Servicios</a>
    <ul class="sub-menu">
      <li><a href="#">L1</a></li>
      <li><a href="#">L2</a>
        <ul class="sub-menu">
          <li><a href="#">L2-1</a></li>
          <li><a href="#">L2-2</a></li>
        </ul>
      </li>
      <li><a href="#">L3</a></li>
      <li><a href="#">L4</a>
        <ul class="sub-menu">
          <li><a href="#">L4-1</a></li>
          <li><a href="#">L4-4</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="#">Acerca de</a>
    <ul class="sub-menu">
      <li><a href="#">Sub1</a></li>
      <li><a href="#">Sub2</a></li>
      <li><a href="#">Sub3</a></li>
      <li><a href="#">Sub4</a></li>
    </ul>
  </li>
  <li><a href="#">Contacto</a></li>
</ul>

最佳答案

代码工作得很好我认为你只需要删除父选择器 .hdrNav 它一定是这样的:

var test1 = $('ul.hdrMenu li');

或者您可以保持选择器不变,并添加一个类为 hdrNav 的父 div。

var test1 = $('ul.hdrMenu li');
test1.on('click', function(e) {
  var mobileMenu = $(e.target).parent().find('> ul.sub-menu');

  if (mobileMenu.css('display') == 'none') {
    e.preventDefault();
    mobileMenu.slideDown();
    e.stopPropagation();
  } else if (mobileMenu.css('display') == 'block') {
    e.preventDefault();
    mobileMenu.slideUp();
    e.stopPropagation();
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="hdrMenu">
  <li><a href="#">Inicio</a></li>
  <li><a href="#">Servicios</a>
    <ul class="sub-menu">
      <li><a href="#">L1</a></li>
      <li><a href="#">L2</a>
        <ul class="sub-menu">
          <li><a href="#">L2-1</a></li>
          <li><a href="#">L2-2</a></li>
        </ul>
      </li>
      <li><a href="#">L3</a></li>
      <li><a href="#">L4</a>
        <ul class="sub-menu">
          <li><a href="#">L4-1</a></li>
          <li><a href="#">L4-4</a></li>
        </ul>
      </li>
    </ul>
  </li>
  <li><a href="#">Acerca de</a>
    <ul class="sub-menu">
      <li><a href="#">Sub1</a></li>
      <li><a href="#">Sub2</a></li>
      <li><a href="#">Sub3</a></li>
      <li><a href="#">Sub4</a></li>
    </ul>
  </li>
  <li><a href="#">Contacto</a></li>
</ul>

关于jquery - 由 jquery 控制的多级 html 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56375744/

相关文章:

javascript - 使用 Facebook 相册图 API 在照片弹出窗口中需要标题

javascript - 纯 JS 中的 Angular ng-hide 指令

javascript - 如何触发 HTML5 验证并在更改事件上设置自定义消息?

PHP:Adobe Reader 无法打开使用 mpdf 创建的 PDF 文件

html - 图像底部的 float 文本

jquery - 如何停止切换面板推送其余内容

jQuery ajax 将 jpg 图像发布到 .net web 服务。图像结果已损坏

javascript - 如何忽略html表格中的事件

c# - jQuery 发布到 Controller 并重定向到 ASP.NET MVC View

html - CSS Transform Rotate 只会压缩视频