1

我正在使用一些 jQuery/JavaScript 来检测页面的路径名并id在导航中为其链接分配一个。它本质上将链接文本从黑色更改为蓝色。无论如何,我已经借用了一些代码并且我不够先进,无法弄清楚RegExp测试部分,但是当它通过主页作为路径/时,它会将 分配给id导航中的所有链接(/index.html通过正常)。有人可以帮我弄清楚为什么测试在路径名上无法正常工作/吗?

$(function() { 
    var url = window.location.pathname,  
        urlRegExp = new RegExp(url.replace(/\/$/,'') + "$");

    $('.nav ul li a').each(function() {  
        if (urlRegExp.test(this.href.replace(/\/$/,''))) {        
            $(this).attr('id', 'selected'); 
        }
    });

    $(function() {
        if (url === "/index.html" || url === "/") {
            $('.nav').attr('id','homenav');
        }
    });
});
4

2 回答 2

2

这应该完成相同的任务:

var trailing_slash_re = /\/$/,
canon_url = location.pathname.replace(trailing_slash_re, '');

$('.nav ul li a').each(function() {
  var this_url = this.href.replace(trailing_slash_re, '');
  if (this_url.substr(-canon_url.length) == canon_url) {
    this.id = 'selected';
    return false; // don't process any others
  }
});

对于每个链接,它确定它是否以canon_url. 一旦找到匹配的锚点,我就会跳出循环。这样可以避免多个selectedid。

于 2013-05-07T16:44:57.837 回答
1

说明你的情况

  • 设置时, urlRegExp = new RegExp(url.replace(/\/$/,'') + "$");您首先要删除尾部斜杠。这是由您的 regex 完成的/\/$/

  • 当您传入 / 时,您将删除该斜杠,生成的正则表达式为/$/. 这将匹配任何内容,因为它正在寻找的只是$(在正则表达式中表示字符串的结尾)。解决方案可能涉及专门处理 / 案例(正如您所指出的那样,您已经完成并且上面的解决方案确实如此)。

如果你想弄乱正则表达式,我发现一个很好的资源是http://gskinner.com/RegExr/

于 2013-05-07T16:57:25.123 回答