javascript - 如何将类 'active' 添加到 href 在 location.pathname 中的导航项

标签 javascript jquery jekyll liquid

我正在尝试在 Jekyll 模板之上构建一个博客风格的网站。我目前正在编写和设计导航,这给我带来了一些问题。使用 this question 的答案我已经设法在当前页面上添加 active 类,但是这里有一些问题仍然需要解决:

  • 首先,当页面加载时,所有“选项卡”都处于事件状态,而不仅仅是“主页”选项卡:

Project homepage screenshot

  • 其次,当 url 比第一级导航更深时,相关的“选项卡”不再处于事件状态。以下屏幕截图的 url 是 [baseurl]/reviews/[name-of-post],但评论“标签”未激活:

enter image description here

我不确定如何解决第一个问题,但对于第二个问题,我想我需要在 location.pathname 中搜索相关的 href,但我需要进一步研究这个问题。将根据需要进行更新,但我已经玩这个很久了,但运气不好,所以我想在此期间发布。

以下是相关部分的代码片段:

侧边导航 HTML(用 Liquid 编写)

<nav id="side-nav">
  <ul class="nav-items-list">
    <li id="nav-item"><a href="{{ site.baseurl }}/"><i class="fas fa-home"></i></a></li>
    {% for page in site.pages %}
    <li id="nav-item">
      <a href="{{ site.baseurl }}/{{ page.title | downcase }}/">
      <i class="{{ page.icon }}"></i>
      </a>
    </li>
    {% endfor %}
  </ul>
</nav>

示例页面(YAML 前端)

---
layout: page
title: Reviews
permalink: /reviews/
icon: "fas fa-star-half-alt"
---

jQuery

$(function(){
  var current = location.pathname;
  $('#nav-item a').each(function(){
      var $this = $(this);
      if($this.attr('href').indexOf(current) !== -1){
          $this.addClass('active');
      }
  })
})

希望这应该足够了,但如果需要更多代码,请告诉我。所有代码也可在 GitHub 上获得,这里的项目也是hosted on GitHub Pages .

提前致谢。

杰米

最佳答案

以下理论上应该有效:

// Compute the closest (2-part) base path from the current location
var basePath = '/' + window.location.pathname.split('/', 3).filter(Boolean).join('/') + '/';

// Add `active` class to the corresponding link if any
$('#nav-item a[href="' + basePath + '"]').addClass('active');

第一行基本上采用了路径名的前两部分,所以:

  • 如果 URL 是 /glossd/,它会生成 /glossd/
  • 如果 URL 是 /glossd/reviews/,它会生成 /glossd/reviews/
  • 如果 URL 是 /glossd/reviews/something/,它仍然会生成 /glossd/reviews/

关于javascript - 如何将类 'active' 添加到 href 在 location.pathname 中的导航项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55323978/

相关文章:

Javascript/Node : store return value of a function into a variable

javascript - 从具有动态 id 的输入字段获取 jquery 中的值

javascript - 如何使用jquery选择删除

html - Jekyll 发布特定样式(添加图像、某些段落的文本列等)

jekyll - 如何全局设置 Jekyll 站点中的所有 URL 以在新的浏览器选项卡中打开?

css - 使用 Jekyll 和 Octopress 部署 CSS

javascript - 玛根托 "Miscellaneous scripts"

javascript - 拉斐尔圆圈内的文字

javascript - Kendo UI 分组过滤器

javascript - 对输入类型 ="number"使用正则表达式删除非数字