使用window.location设置选定的导航选项

时间:2018-01-12 21:11:10

标签: javascript

我有一个主题,根据您访问的URL设置所选的左侧导航选项。但是,如果它是附加到URL的变量,则会中断,例如www.test.com/abc.aspx?delete=1。网址www.test.com/abc.aspx正常工作,并将链接ABC设置为活动状态。

我尝试修改代码以切断?之后的所有内容,但它不会按预期工作(选择NAV中没有任何内容)。

原始代码:

$(function () {
    var url = window.location;
    var element = $('ul#sidebarnav a').filter(function () {
        return this.href == url;
    }).addClass('active').parent().addClass('active');
    while (true) {
        if (element.is('li')) {
            element = element.parent().addClass('in').parent().addClass('active');
        }
        else {
            break;
        }
    }

}); 

我的编辑代码:

$(function () {
    var url = window.location.toString();
    var url_fix = url.split('?');
    var element = $('ul#sidebarnav a').filter(function () {
        return this.href == url_fix[0];
    }).addClass('active').parent().addClass('active');
    while (true) {
        if (element.is('li')) {
            element = element.parent().addClass('in').parent().addClass('active');
        }
        else {
            break;
        }
    }
});

我认为这是"返回this.href == url_fix [0];"那是罪魁祸首。

解决方案(阅读评论后我想出了什么,谢谢你们):

$(function () {
    var url = location.href.split("/").slice(-1).toString();
    var url_fix = url.split('?');
    var element = $('ul#sidebarnav a').filter(function () {
        return $(this).attr("href") == url_fix[0];
    }).addClass('active').parent().addClass('active');
    while (true) {
        if (element.is('li')) {
            element = element.parent().addClass('in').parent().addClass('active');
        }
        else {
            break;
        }
    }
});

2 个答案:

答案 0 :(得分:1)

请尝试比较pathname

var element = $('ul#sidebarnav a').filter(function () {
    return this.pathname == location.pathname;
}).addClass('active').parent().addClass('active');

例如,在此页面location.pathname返回:

"/questions/48234042/set-selected-navigation-option-using-window-locaiton/48234196"

并且不包含location.hashlocation.search

答案 1 :(得分:0)

我用@vbguyny的答案解决了这个问题。必须添加location.href.split(" /")。slice(-1).toString();获取实际页面名称,但之后它工作正常。谢谢!