无法将类别应用于菜单项

时间:2018-10-10 12:49:46

标签: javascript bootstrap-4

下面的代码有问题:

JS

$(document).ready(function() {
  var url = window.location;
  var element = $('#nav1  li a').filter(function() {
    return this.href == url || url.href.indexOf(this.href) == 0;
  }).parent().addClass('navigation__active');
  if (element.is('li')) {
    element.addClass('navigation__active').parent().parent('li').addClass('navigation__active')
  }
});

HTML

<ul id="nav1" class="navigation">
<li class="navigation__active"><a href="#"><i class="zmdi zmdi-home"></i> 
   Home</a></li>

 <li class="navigation__sub">
    <a href="#"><i class="zmdi zmdi-view-week"></i> About</a>
    <ul>
        <li><a href="#">History</a></li>
        <li><a href="#">Team</a></li>
        <li><a href="#">Projects</a></li>
    </ul>
</li>
  <li class="navigation__active"><a href="#"><i class="zmdi zmdi-home"></i> 
    Contact</a></li>
 <ul>

现在,我可以选择“关于”>“历史记录”,“团队”,“项目”,例如,这很好,但是当我单击“主页”或“联系人”时-我不应用navigation__active类。 有什么解决办法吗?

1 个答案:

答案 0 :(得分:0)

我假设您想基于地址栏中的URL将类应用于当前选定的菜单项。我会将其构建为一个单页面应用程序,以便您可以跟踪菜单状态,然后根据所选菜单项而不是您采用的方法来更新页面内容。

如果您想按照此处的方式进行操作,则此代码可能比您要查找的内容更接近您要查找的内容。我不得不对一些事情进行硬编码,但是我认为至少您会了解到您在JS中做错了什么。

$(document).ready(function() {
  var url = {href: "https://stacksnippets.net/test"};
  var element = $('#nav1  li a').filter(function(index, el) {
    return url.href === el.href;
  });
  
  var selectedElem = $(element[0]);
  
  if (selectedElem.parent().is('li')) {
    selectedElem.parent('li').addClass('navigation__active')
    var paretnMenuItem = selectedElem.parent('li').parent('ul').parent('li');
    paretnMenuItem.children('a').addClass('navigation__active')
  }
});
.navigation__active {
  background-color: green;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul id="nav1" class="navigation">
  <li>
    <a href="#"><i class="zmdi zmdi-home"></i> Home</a>
  </li>

  <li class="navigation__sub">
    <a href="#"><i class="zmdi zmdi-view-week"></i> About</a>
    <ul>
      <li><a href="#">History</a></li>
      <li><a href="test">Team</a></li>
      <li><a href="#">Projects</a></li>
    </ul>
  </li>
  <li>
    <a href="#"><i class="zmdi zmdi-home"></i> Contact</a>
  </li>
 <ul>