javascript - 如何将两级 jQuery 扩展菜单更改为三级?

标签 javascript jquery html

我目前有一个使用 jQuery 触发的 2 级扩展菜单。我一直在兜圈子,并且一直对如何更新 if/else 语句以适用于多级别(第三层)感到困惑。我想知道是否有人可以帮我完成这个任务?

jsFiddle example

提前致谢!

HTML:

<ul id="MobileNav" class="mobile-nav">
  <li class="mobile-nav__item">
    <button type="button" class="js-toggle-submenu mobile-nav__link" data-level="1" aria-expanded="false">
      <span class="mobile-nav__label">Link Level 1 - 1</span>
    </button>
    <ul class="mobile-nav__dropdown" data-level="2">
      <li class="mobile-nav__item">
        <button type="button" class="js-toggle-submenu mobile-nav__link" aria-expanded="false">
          <span class="mobile-nav__label">Link Level 2 - 1</span>
        </button>
        <ul class="mobile-nav__dropdown" data-level="3">
          <li class="mobile-nav__item">
            <a href="/" class="mobile-nav__sublist-link">
              <span class="mobile-nav__label">Link Level 3 - 1</span>
            </a>
          </li>
        </ul>     
      </li>
    </ul>
  </li>
  <li class="mobile-nav__item">
    <button type="button" class="js-toggle-submenu mobile-nav__link" data-level="1" aria-expanded="false">
      <span class="mobile-nav__label">Link Level 1 - 2</span>
    </button>
    <ul class="mobile-nav__dropdown" data-level="2">
      <li class="mobile-nav__item">
        <button type="button" class="js-toggle-submenu mobile-nav__link" aria-expanded="false">
          <span class="mobile-nav__label">Link Level 2 - 1</span>
        </button>
        <ul class="mobile-nav__dropdown" data-level="3">
          <li class="mobile-nav__item">
            <a href="/" class="mobile-nav__sublist-link">
              <span class="mobile-nav__label">Link Level 3 - 1</span>
            </a>
          </li>
          <li class="mobile-nav__item">
            <a href="/" class="mobile-nav__sublist-link">
              <span class="mobile-nav__label">Link Level 3 - 2</span>
            </a>
          </li>
          <li class="mobile-nav__item">
            <a href="/" class="mobile-nav__sublist-link">
              <span class="mobile-nav__label">Link Level 3 - 3</span>
            </a>
          </li>
        </ul>     
      </li>
      <li class="mobile-nav__item">
        <a href="/" class="mobile-nav__sublist-link">
          <span class="mobile-nav__label">Link Level 2 - 2</span>
        </a>
      </li>
      <li class="mobile-nav__item">
        <a href="/" class="mobile-nav__sublist-link">
          <span class="mobile-nav__label">Link Level 2 - 3</span>
        </a>
      </li>
    </ul>
  </li>
</ul>

JS:

var accordion_head  = $('.js-toggle-submenu'),
accordion_body  = $('.mobile-nav__dropdown');

accordion_head.on('click', function(event) {
  event.preventDefault();

  if ($(this).hasClass('active')) {
    accordion_body.slideUp('normal');
    accordion_head.removeClass('active');
  } else {
    accordion_body.slideUp('normal');
    $(this).next().stop(true,true).slideToggle('normal');
    accordion_head.removeClass('active');
    $(this).addClass('active');
  }
});

最佳答案

您可以使下拉菜单适用于任何嵌套级别。您正在使用条件扩展菜单来检查不需要的 active 类。只需一行代码即可切换 active 类和 slideUpslideDown

这是演示

jQuery(document).ready(function($) {
  var accordion_head  = $('.js-toggle-submenu');

  accordion_head.on('click', function(event) {
    event.preventDefault();
    if($(this).hasClass('active')){
      $(this).next('.mobile-nav__dropdown').find('.active').removeClass('active').next('.mobile-nav__dropdown').slideUp('normal');
    }
    $(this).parent('li').siblings('li').find('.active').removeClass('active').next('.mobile-nav__dropdown').slideUp('normal');
    $(this).stop().toggleClass('active').next('.mobile-nav__dropdown').stop().slideToggle('normal');
  });
});
.mobile-nav__dropdown {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul id="MobileNav" class="mobile-nav">
  <li class="mobile-nav__item">
    <button type="button" class="js-toggle-submenu mobile-nav__link" data-level="1" aria-expanded="false">
      <span class="mobile-nav__label">Link Level 1 - 1</span>
    </button>
    <ul class="mobile-nav__dropdown" data-level="2">
      <li class="mobile-nav__item">
        <button type="button" class="js-toggle-submenu mobile-nav__link" aria-expanded="false">
          <span class="mobile-nav__label">Link Level 2 - 1</span>
        </button>
        <ul class="mobile-nav__dropdown" data-level="3">
          <li class="mobile-nav__item">
            <a href="/" class="mobile-nav__sublist-link">
              <span class="mobile-nav__label">Link Level 3 - 1</span>
            </a>
          </li>
        </ul>     
      </li>
    </ul>
  </li>
  <li class="mobile-nav__item">
    <button type="button" class="js-toggle-submenu mobile-nav__link" data-level="1" aria-expanded="false">
      <span class="mobile-nav__label">Link Level 1 - 2</span>
    </button>
    <ul class="mobile-nav__dropdown" data-level="2">
      <li class="mobile-nav__item">
        <button type="button" class="js-toggle-submenu mobile-nav__link" aria-expanded="false">
          <span class="mobile-nav__label">Link Level 2 - 1</span>
        </button>
        <ul class="mobile-nav__dropdown" data-level="3">
          <li class="mobile-nav__item">
            <a href="/" class="mobile-nav__sublist-link">
              <span class="mobile-nav__label">Link Level 3 - 1</span>
            </a>
          </li>
          <li class="mobile-nav__item">
            <a href="/" class="mobile-nav__sublist-link">
              <span class="mobile-nav__label">Link Level 3 - 2</span>
            </a>
          </li>
          <li class="mobile-nav__item">
            <a href="/" class="mobile-nav__sublist-link">
              <span class="mobile-nav__label">Link Level 3 - 3</span>
            </a>
          </li>
        </ul>     
      </li>
      <li class="mobile-nav__item">
        <a href="/" class="mobile-nav__sublist-link">
          <span class="mobile-nav__label">Link Level 2 - 2</span>
        </a>
      </li>
      <li class="mobile-nav__item">
        <a href="/" class="mobile-nav__sublist-link">
          <span class="mobile-nav__label">Link Level 2 - 3</span>
        </a>
      </li>
    </ul>
  </li>
</ul>

关于javascript - 如何将两级 jQuery 扩展菜单更改为三级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58749241/

相关文章:

javascript - 在线游戏 : A fast not-so-secure cryptographic hashing/a checksum function in JavaScript?

javascript - Google Drive Api v3 如何使用 Google 表格格式上传? 400 回复

javascript - 我有一条消息输出,我希望有一个词橙色,其余正常

php - mysql_escape_string() 有什么作用?

javascript - 将数据发布到 JSON - Angular .post

php - div 文本未使用 css 正确定位?

javascript - 使用 javascript 根据 JSON 中的最高值获取前 4 个键和值的 2 个不同数组

javascript - 从表单中找到用户输入并将其分配给属性

检测到颜色时单击的 JavaScript 命令

php - 如何将动态静态 Bing map 嵌入网页