Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RegExp测试jQuery_Javascript_Jquery_Regex - Fatal编程技术网

Javascript RegExp测试jQuery

Javascript RegExp测试jQuery,javascript,jquery,regex,Javascript,Jquery,Regex,我使用一些jQuery/JavaScript来检测页面的路径名,并为导航中的链接分配一个id。它实际上将链接文本从黑色更改为蓝色。无论如何,我已经借用了一些代码,我还没有足够的能力来理解RegExp测试部分,但是当它以路径/通过主页时,它会将id分配给导航中的所有链接(/index.html通过得很好)。有人能帮我找出为什么测试在路径名/上不能正常工作吗 $(function() { var url = window.location.pathname, urlRe

我使用一些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');
        }
    });
});

这应该完成同样的任务:

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\u url
结尾。一旦找到匹配的锚点,我就跳出循环。这样可以避免选择多个
id。

来解释您的情况
  • 当你设置
    urlRegExp=newregexp(url.replace(/\/$/,'')+“$”)首先删除尾部斜杠。这是由正则表达式
    /\/$/
    完成的

  • 传入/时,将删除该斜杠,结果正则表达式为
    /$/
    。这将匹配任何内容,因为它所查找的是
    $
    (在regex中表示字符串的结尾)。解决方案可能涉及具体处理/案例(如您所示,您已经完成了,并且上述解决方案也完成了)


如果你想乱搞正则表达式,我发现一个很好的资源是

如果你不懂正则表达式,你怎么能知道什么时候有人提供了正确的答案?我会测试它,看看它是否有效。在测试之前,我实现了一个设置“/”等于“/index.html”的变通方法,代码现在可以工作了。尽管如此,我还是很想学习,但也许正则表达式现在有点超出了我的理解力——我正在学习。我喜欢这段代码——它更干净,而且不太经常地进入DOM。很好,杰克!很好的解释和资源,大卫。我感谢你花时间解释所发生的事情——这完全有道理。