Javascript 根据位置高亮显示按钮

Javascript 根据位置高亮显示按钮,javascript,jquery,html,regex,Javascript,Jquery,Html,Regex,我试图根据正在查看的页面突出显示导航按钮(在菜单中)。以下是我到目前为止的情况: var loca = String(document.location.href); // Get document location and specific page. if (loca) { if(loca.search(RegExp("((/[\w]*)\.php)")) != -1) { activate(loca.match(RegExp("((/[\w]*)\.php)").

我试图根据正在查看的页面突出显示导航按钮(在菜单中)。以下是我到目前为止的情况:

var loca = String(document.location.href);

// Get document location and specific page.
if (loca) {
    if(loca.search(RegExp("((/[\w]*)\.php)")) != -1) {
        activate(loca.match(RegExp("((/[\w]*)\.php)").split("/").join("")));
    } else {
        activate("home");
    }
}

// Activate a button
function activate(bName) {
    $(".button[name=" + bName + "]").css({
        "border-left": "1px solid white",
        "border-right": "1px solid white"
    });
}
我想做的是:

  • 获取页面的URL
  • 获取页面的特定文件名,如果未找到,则我们在主页上
  • 使用jQuery,我尝试查找按钮的名称,如果名称与文件名匹配,则突出显示它

  • 问题是,这只会突出显示“主页”按钮。我做错了什么?另外,如果你对我如何更好地完成这项工作有任何建议,请告诉我

    我会得到如下文件名:

    var pathname = window.location.pathname.split("/");
    var filename = pathname[pathname.length-1].split(".")[0];
    
    alert(filename);
    

    我没有解决方案,但我认为正则表达式是有缺陷的。您是否尝试将结果存储在变量中并将其记录在console.log中

    您的正则表达式不正确

    var loc_match = window.location.href.match(/(\w+)\.php/);
    activate(loc_match ? loc_match[1] : "home");
    

    我实际上已经实现了类似的东西。这是我的密码:

    var currentPage = window.location.pathname.toLowerCase().split('/').reverse()[0].split('#')[0].split('?')[0];
    
    if (!currentPage || currentPage == '')
    {
        currentPage = 'default.aspx';
    }
    
    $('#nav li').removeClass('current').each(function() {
        var href = $(this).find('a').first().attr('href');
        if (href && href.toLowerCase().indexOf(currentPage) >= 0)
        {
            $(this).addClass('current');
        }   
    });
    

    这将考虑URL中可能存在的任何查询字符串或搜索。使用
    reverse()
    可能不是最有效的方法,但它确实有效。

    当您将regexp声明为新的regexp对象时,必须使用双反斜杠转义符号(而不是一个反斜杠,当您只分配像
    var a=/\w/i;
    这样的文字时); 因此,经过一些reg exp更正后,您的代码应该可以工作:

    var loca = document.location.href;
    var pattern = new RegExp("[\\w]*(?=\\.php)","i");
    // Get document location and specific page.
        if(pattern.test(loca)) {
            activate(pattern.exec(loca));
        } else {
            activate("home");
        }
    // Activate a button
    function activate(bName) {
        $(".button[name=" + bName + "]").addClass('active')
    }
    

    如前所述,将类分配给活动元素更容易。

    我还建议创建一个CSS类,然后添加/删除该类,而不是硬编码值。@Nick:我同意你的看法,我以前也有过这种方式,但我仍然有同样的问题。

    这非常有效,我也非常感谢您的提示。:)我最喜欢这种方式;更简单更干净。非常感谢。