Javascript RegExp测试jQuery
我使用一些jQuery/JavaScript来检测页面的路径名,并为导航中的链接分配一个Javascript RegExp测试jQuery,javascript,jquery,regex,Javascript,Jquery,Regex,我使用一些jQuery/JavaScript来检测页面的路径名,并为导航中的链接分配一个id。它实际上将链接文本从黑色更改为蓝色。无论如何,我已经借用了一些代码,我还没有足够的能力来理解RegExp测试部分,但是当它以路径/通过主页时,它会将id分配给导航中的所有链接(/index.html通过得很好)。有人能帮我找出为什么测试在路径名/上不能正常工作吗 $(function() { var url = window.location.pathname, urlRe
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。很好,杰克!很好的解释和资源,大卫。我感谢你花时间解释所发生的事情——这完全有道理。