【问题标题】:Add active class to parent nav when on child pages在子页面上将活动类添加到父导航
【发布时间】:2016-05-03 16:38:09
【问题描述】:

当用户在基于 URL 的子页面中时,我需要突出显示父导航项。

用户当前在页面 foo1-child 上,并且父级是 foo1,所以我需要将活动类添加到 Foo1http://foo.com/foo1/foo1-child.html

资产净值:

<ul class="main-nav">
  <li><a href="/foo.com/foo1.html">Foo 1</a></li>
  <li><a href="/foo.com/foo5.html">Foo 5</a></li>
</ul>

我没有问题向导航中的链接添加活动类,因为我只是比较了.nav li a 中的每个 href 与 URL,但是我如何检查 URL 中是否有匹配的锚链接名称或类似的东西?

当前 JS

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

【问题讨论】:

  • 你所做的似乎是正确的。您的脚本遇到什么问题?
  • 您能否提供有关您的应用的更多信息。您有后端还是完全是前端应用程序?无论哪种方式,我想路由器都可以帮助您,或者在链接上添加一些条件语句来添加类。但需要更多信息。
  • 我无法访问后端代码,并且该应用程序没有使用任何 javascript mvc 框架,它只有 jQuery。
  • @DanMitchell - 你的 JS 为我工作!我一直在寻找一个可以处理我的子页面的。不知道为什么它不适合你,但我想我会让你知道它至少对我有用(在自定义 WordPress 网站上)。谢谢!

标签: javascript jquery html css


【解决方案1】:

如果你从它们的末尾切断“.html”并在该位置搜索a的href(应该更短),它应该可以工作。

  $('.main-nav li > a').each(function () {
    var $this = $(this);
    var loc = location.
    if (location.pathname.replace(/\/[^\/]*\.html$/, '').startsWith($this.attr('href').replace(/\.html$/, ''))) {
      $this.parent().addClass('active');
    }
  });

您可以在此处的“操作”中看到它:https://jsfiddle.net/c8u2f91v/ 请注意,它使用假的 location_pathname 而不是 location.pathname,因为 jsfiddle 在路径中没有必要的前缀,但它表明它应该可以工作。

【讨论】:

  • 已更改。如果这仍然不行,那么还请在问题中添加更多可能页面的示例,可能的面包屑链接。
  • 对不起,我添加了路径名
  • 看起来问题出在codepen中。网址是这样的:/boomerang/d64e88d0d8c483755855f22336dcd9f71454177965519,所以比较不起作用。
猜你喜欢
  • 2014-06-13
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多