jquery - 如何将多级添加到响应式 css 菜单中?

标签 jquery html css

在你们对我大吼大叫之前, 我知道有很多关于此的问题,我也看到了一些不错的完整菜单。

但是我的看起来很简单,可能是因为我用了很长时间,和gf.lol一样

At the moment my menu has 2 levels but I want to do it multi level

我尝试了几种解决方案,但无法实现,我的 css 很差。 这是我在那里做测试的 fiddle :https://jsfiddle.net/Netmaster/14gcz7bk/

这里是我的代码:

$("nav div").click(function() {
  $("ul").slideToggle();
  $("ul ul").css("display", "none");
});
// $("ul li").click(function(){
//     $("ul ul").slideUp();
//     $(this).find('ul').slideToggle();
// });
$('ul li').click(function() {
  $(this).siblings().find('ul').slideUp();
  $(this).find('ul').slideToggle();
});
$(window).resize(function() {
  if ($(window).width() > 768) {
    $("ul").removeAttr('style');
  }
});
nav div {
  padding: 0.6em;
  background: #e3e3e3;
  display: none;
  cursor: pointer;
  color: #292929;
  font-size: 24px;
}

nav ul li i {
  color: #292929;
  float: right;
  padding-left: 20px;
}

ul {
  margin: 0px;
  padding: 0px;
  background: #e3e3e3;
  list-style-type: none;
  position: relative;
}

ul li {
  display: inline-block;
}

ul li a {
  padding: 15px;
  color: #292929;
  text-decoration: none;
  display: block;
}

ul li:hover {
  background: lightgrey;
}

ul ul {
  position: absolute;
  min-width: auto;
  background: lightgrey;
  display: none;
}

ul ul li {
  display: block;
  background: #e3e3e3;
}

ul li:hover>ul {
  display: block;
}

@media (max-width: 768px) {
  nav div {
    display: block;
  }
  ul {
    display: none;
    position: static;
    background: #e3e3e3;
  }
  ul li {
    display: block;
  }
  ul ul {
    position: static;
    background: #e3e3e3;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<nav>
  <div>
    <i class="fa fa-bars"></i>
  </div>

  <ul>
    <li><a href="#">Home</a></li>
    <li><a href="#">JavaScript <i class="fas fa-sort-down"></i></a>
      <ul>
        <li><a href="#">jQuery</a></li>
        <li><a href="#">Vanilla JavaScript</a></li>
        <li><a href="#">ReactJS</a></li>
        <li><a href="#">VueJS</a></li>
      </ul>
    </li>
    <li><a href="#">Graphic Design <i class="fas fa-sort-down"></i></a>
      <ul>
        <li><a href="#">Font</a></li>
        <li><a href="#">PSD</a></li>
        <li><a href="#">Illustration</a></li>
        <li><a href="#">Texture</a>
        </li>
      </ul>
    </li>
    <li><a href="#">About</a></li>
    <li><a href="#">Contact</a></li>
  </ul>
</nav>

最佳答案

您应该调用 stopPropagation() 方法以防止第一级关闭,同时关闭第二级:

$('ul li').click(function(e) {
  e.stopPropagation();
  $(this).find('ul').slideToggle();
});

关于jquery - 如何将多级添加到响应式 css 菜单中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58994914/

相关文章:

javascript - 使用 jscript 隐藏/显示动态表中的行

javascript - 灯箱未加载动态选择器

html - 为什么最小高度样式对 div 没有影响

javascript - jQuery 应该等到 css 转换

jquery - 切换到 jQuery 1.9.1 时窗口高度计算停止

jquery - 如何异步加载jquery及其依赖脚本

jquery - 在 JSON 响应中返回 'PartialView' 的问题

jquery - Bootstrap 响应式 9by16

javascript - 当用户按下浏览器的后退按钮时关闭 Jquery 对话框

php - html 无法摆脱 top margin