要排除的Jquery正则表达式'/';in.replace()

要排除的Jquery正则表达式'/';in.replace(),jquery,Jquery,我有一个菜单,如果它符合URL中的某些条件,我想向其中添加一个类“active” 这将允许我设置与用户所在页面相关的菜单项的样式 jquery正在添加该类: $(function () { setNavigation(); }); function setNavigation() { var path = window.location.pathname; path = path.replace(/\/$/, ""); path = decodeURICompo

我有一个菜单,如果它符合URL中的某些条件,我想向其中添加一个类“active”

这将允许我设置与用户所在页面相关的菜单项的样式

jquery正在添加该类:

$(function () {
    setNavigation();
});

function setNavigation() {
    var path = window.location.pathname;
    path = path.replace(/\/$/, "");
    path = decodeURIComponent(path);

    $(".nav a").each(function () {
        var href = $(this).attr('href');
        if (path.substring(0, href.length) === href) {
            $(this).closest('li').addClass('active');
        }
    });
}
(小提琴可以在这里找到:)

问题在于,无论页面/url是什么,它都会将活动类应用于我的主页菜单项
,以及用户所在的页面

我可以通过指定完整的URL来解决这个问题,比如

但为了保持一致性,我不希望将我的域硬编码到菜单项中

有人介意透露一些信息并解释出哪里出了问题吗

为了澄清,如果我指定整个地址,即

但如果我指定为:

<a href="/">Home</a>

问题在于:

if(path.substring(0,href.length)==href){…}

这将始终匹配“/”,因为href.length是1,因此子字符串是“/”

那就

if(path==href){…}


相反?我不确定您想通过子字符串实现什么。

您的问题实际上是什么,这有点不清楚。请准确地解释你的代码应该做什么,以及它以什么方式做不到。如果一开始的斜杠就是问题所在,你就不能这样做吗
path.substring(1,href.length)
此外,JSFIDLE与此不兼容,因为无法使
#
锚定生效。@Alnitak我已经更新了我的答案,希望它能澄清我的问题?我可以在我的网站上提供一个链接到一个实例。但是我认为这里不允许这样做?谢谢,这是有道理的,但是您提供的答案完全停止了函数的工作?如果路径是example.com/about/notes,那么使用子字符串,我将尝试允许脚本正确运行。选择“关于”并将其应用于菜单中的“关于”。不是“笔记”。