javascript - Active 类重置回原始状态

标签 javascript html

我的导航栏具有以下设置:-

  <li class="nav-item active">
        <a class="btn btn-outline-primary" href="/Index">Home<span class="sr-only">(current)</span></a>
    </li>
    <li class="nav-item">
        <a class="btn btn-outline-primary" href="/Root/About">About</a>
    </li>
    <li class="nav-item">
        <a class="btn btn-outline-primary" href="/Root/Contact">Contact</a>
    </li>
    <li class="nav-item">
        <a class="btn btn-outline-primary" href="/Search/LatestChanges">@Localizer["menu_LatestChanges"]</a>
    </li>

javascript 文件,有助于添加和删除事件类

<script>
    var btns = document.getElementsByClassName("nav-item");
    for (var i = 0; i < btns.length; i++) {
        btns[i].addEventListener("click", function () {
            var current = document.getElementsByClassName("active");
            current[0].className = current[0].className.replace(" active", "");
            this.className += " active";
        });
    }

</script>

它确实在单击按钮时添加了事件类,但是,奇怪的是,当您单击导航项时,它基本上会添加事件类,然后立即将其删除/重置回原始状态,因此,我的索引永远保持活跃状态​​。我认为我们可能需要更改 javascript 逻辑。非常感谢您的帮助。谢谢

最佳答案

您正在单击时分配一个类,但是当用户单击菜单项时,它会重新加载页面(除非您使用的是单页网站),


使用以下代码代替您当前的代码将事件类添加到当前菜单项,修改了几行代码。

var currentUrl = document.location.href;
   
var btns = document.getElementsByClassName("nav-item");
for (var i = 0; i < btns.length; i++) {
if(currentUrl.includes(btns[i].children[0].pathname)){
    btns[i].children[0].classList.add("active");
  }
}

使用jQuery我们可以让上面的代码变得更简单,查看下面的jquery版本,它需要你将jquery lib添加到你的模板中

jQuery(document).ready(function(){

var currentUrl = document.location.href;
var btns = jQuery(".nav-item > a");
  btns.each(function(i,v){
    if(currentUrl.includes(v.pathname)){
      jQuery(v).addClass("active");
    }
  });
});

关于javascript - Active 类重置回原始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52567761/

相关文章:

javascript - karma 覆盖 + RequireJS : Misleading coverage reports

javascript - 一段时间后如何调用 particleJS?

html - 如果不推荐使用名称属性,如何专门选择单选按钮?

javascript - 如何创建一个在没有数据库的情况下使用来自另一个页面的 HTML 表单进行更新的页面?

javascript - 验证 DOM 嵌套 (...) : <tr> cannot appear as a child of <div>

javascript - 使用 ng-class 和 ng-change 在元素中动态设置类

javascript - 无法使用 jquery 更改悬停在 <a> 上的跨度

javascript - 从任何地方滚动一个 Div

html - 在我的网站上打开链接不起作用

javascript - 创建独立的离线 HTML5 应用程序以及嵌入其资源的最佳方法