Jquery正则表达式在.replace()中排除'/'

时间:2014-09-30 12:29:36

标签: jquery

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

这样我就可以设置与用户所在页面相关的菜单项。

该类正由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');
        }
    });
}

(小提琴可以在这里找到:http://jsfiddle.net/fc8fdv4a/

问题在于,无论页面/网址是什么,它都将活动类应用于我的主页菜单项<a href="/">Home</a>以及用户所在的页面。

我可以通过分析<a href="example.com">Home</a>等完整网址来解决这个问题。

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

有人会介意说清楚并解释什么是错的吗?

为了澄清,我可以让脚本按预期运行,如果我指定整个地址,即

<a href="example.com">Home</a>

但如果我指定为:

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

1 个答案:

答案 0 :(得分:0)

问题在于:

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

总是匹配&#39; /&#39;,因为href.length是1,因此子字符串是&#39; /&#39;。

怎么样只是

if (path == href) {...}

代替?我不确定你要用子串实现什么。