【问题标题】:How do I set a nav li class to "active" using javascript in bootstrap 4?如何在 bootstrap 4 中使用 javascript 将 nav li 类设置为“活动”?
【发布时间】:2017-08-05 01:52:46
【问题描述】:

编辑:更清楚地说,我正在尝试使导航栏按钮在您所在的任何页面上都处于活动状态。

我在这里有一个不错的小导航栏,当您在导航栏上的每个页面上时,我正在尝试使 ul/li 类处于活动状态。但是由于某种原因,它根本不起作用。

这是我的导航:(包括我尝试运行的 javascript)

var selector, elems, makeActive;

selector = '.nav-link';

elems = document.querySelectorAll(selector);

makeActive = function () {
    for (var i = 0; i < elems.length; i++)
        elems[i].classList.remove('active');
    
    this.classList.add('active');
};

for (var i = 0; i < elems.length; i++)
    elems[i].addEventListener('mousedown', makeActive);
<!-- Start Navigation -->
<nav class="navbar navbar-light bg-faded">
      <button class="navbar-toggler hidden-sm-up" type="button" data-toggle="collapse" data-target="#navbar-header" aria-controls="navbar-header">
        &#9776;
      </button>
      <div class="collapse navbar-toggleable-xs" id="navbar-header">
        <a class="navbar-brand" href="#">A Trainers Best Friend</a>
        <ul class="nav navbar-nav pull-xs-right">
          <li class="nav-item">
            <a class="nav-link" href="home.php">Home <span class="sr-only"></span> <i class="fa fa-home" aria-hidden="true"></i></a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="clients.php">Clients <i class="fa fa-address-book" aria-hidden="true"></i></a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Schedule <i class="fa fa-calendar" aria-hidden="true"></i></a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Session Manager <i class="fa fa-handshake-o" aria-hidden="true"></i></a>
          </li>
		  <li class="nav-item">
            <a class="nav-link" href="logout.php">Logout <i class="fa fa-sign-out" aria-hidden="true"></i></a>
          </li>
        </ul>
      </div>
    </nav> 
<!-- End Navigation -->

您可能会看到我的 js 无法正常工作。我尝试将我的选择器更改为 .nav、.nav-link、.nav li,但似乎没有任何工作可以完成。任何帮助将不胜感激。

【问题讨论】:

  • 你说“当你在每一页上”。这是否意味着导航栏按钮对于您所在的任何页面都是活动的,因为在 mousedown 上触发该功能不会这样做。
  • 对我所在的任何页面,导航栏按钮都处于活动状态。单击链接时不会触发mousedown吗?我对 Javascript 真的很陌生。对此感到抱歉-也许您可以为我指明正确的方向?此外,我将更新我的问题以更清楚。
  • mousedown 事件在用户的鼠标在指定元素上按下时触发。用户点击链接时不会触发。
  • 要拥有活动按钮,您可以手动将active 类手动添加到每个页面的按钮
  • 或者,您可以解析 URL 并将活动类动态添加到与 URL 匹配的任何按钮

标签: javascript html bootstrap-4


【解决方案1】:

您可以将它用于您的所有页面。它解析按钮的innerHTML 并从字典中找到匹配的 URL 路径。

const paths = {
    'About': '/about',
    'Help': '/help'
    // etc... for all your pages
}

for (let nav of document.querySelectorAll('.nav-link')){
    if (paths[nav.innerHTML] === window.location.pathname)
        nav.classList.add('active')
}

您还可以修改代码以查询导航链接的id 而不是innerHTML。为每个链接添加不同的id 需要做更多的工作,但是 如果您想在某个时候翻译您的网站,效果会更好

【讨论】:

  • 您好 Ginkoid,感谢您的帮助。但是由于某种原因,此代码不起作用。我匹配了你指定的所有页面,但没有触发活动导航链接。
  • 抱歉回复晚了……我现在正在使用手机应用程序……我回家后会进行测试。现在,你能告诉我你用的是什么浏览器吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-28
  • 1970-01-01
  • 1970-01-01
  • 2018-01-08
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多