【问题标题】:Match anchor tag with a specific href将锚标记与特定的 href 匹配
【发布时间】:2019-04-21 04:48:45
【问题描述】:

我有一个带有导航链接的侧边栏的仪表板,一旦您转到链接,我会在其中突出显示侧面的每个链接。我通过这样做来匹配链接

$(function() {
    var item = $('.sidebar-menu a[href="' + location.href + '"]');

    item.parent().addClass('active');
});

但问题是,如果您在地址中添加哈希 (#),则它不再与链接匹配。我希望它无论如何都匹配它。

目前它会匹配:

  • mysite.com/students/companies

但它不匹配:

  • mysite.com/students/companies#
  • mysite.com/students/companies/subpage

我希望它匹配包括“mysite.com/students/companies”在内的任何内容

【问题讨论】:

    标签: javascript jquery css-selectors


    【解决方案1】:

    我认为你遇到了问题,因为你的锚标记看起来像这样:

    <a href='somethingelse.php'>Something Else</a>
    

    我注意到你调用父 div 所以..你用 div 或 ul,li 或其他东西包装你的锚标记..

    您可以简单地添加一些额外的数据,例如“data-user=” 所以&lt;div data-user='companies'&gt;&lt;a href='somethingelse.php'&gt;Something Else&lt;/a&gt;&lt;/div&gt;

    所以现在,如果有人在公司内部或其他什么地方,那就去做吧:

    var url_string = window.location.href;
    var url = url_string.split('/')
    var item = $('div[data-user='+url[3]+']).addClass('active');
    

    这将适用于网页看起来像: www.some.com/companies 和 www.some.com/companies/sometihng 甚至 www.some.com/companies/sometihng/more

    【讨论】:

      【解决方案2】:

      试一试

      $('.sidebar-menu a').filter(function() {
        return location.href.indexOf(this.href)!=-1;
      }).parent().addClass('active');
      
      var item = $('.sidebar-menu a[href*="' + location.pathname + '"]');
      

      【讨论】:

      • 但是如果路径名是“/students/companies/somethingelse”呢?我希望“/students/companies”匹配它
      • 仍然只匹配“/students/companies/”
      • 我将 this.href.indexOf(location.pathname) 更改为 location.href.indexOf(this.href) 并且成功了
      猜你喜欢
      • 2020-03-29
      • 1970-01-01
      • 2015-01-20
      • 2015-09-23
      • 2020-10-13
      • 2019-03-07
      • 2012-04-11
      • 1970-01-01
      • 2011-12-28
      相关资源
      最近更新 更多