我正在使用REGEX和js替换来动态填充href中的变量。下面的代码第一次在页面上使用时会起作用,但如果将另一个变量传递给函数,则它不会替换ANYTHING。
function change(fone){
$("a[href^='/application']").each(function(){
this.href = this.href.replace(/device=.*/,"device="+ fone);
});
}
答案 0 :(得分:3)
问题是this.href
实际上返回了一个完整的绝对URL。因此,即使您的HTML为<a href="/foo">
,.href
属性也会返回http://mydomain.com/foo
。
因此,您的href属性将填充完整的绝对URL,然后a[href^='/application']
选择器不再匹配,因为href属性以域名开头,而不是/application
。< / p>
答案 1 :(得分:1)
.href
会返回完全限定的网址,例如`HTTP://www.mydomain.com/application / ......“。因此,选择器第二次不起作用,因为您的域相对URL已被完整的URL替换,并且它正在寻找以“/ application”开始的内容。
改为使用$(this).attr('href').replace...
。
在这里小提琴:http://jsfiddle.net/pcm5K/3/
答案 2 :(得分:1)
正如Squeegy所说,你是第一次更改href
所以它不再以/application
开头 - 第二次以http://
开头。
您可以使用jQuery Attribute Contains Selector获取链接,使用捕获组进行替换可能也是更好的做法。像这样:
$("a[href*='/application']").each(function(){
this.href = this.href.replace(/(device=)\w*/, "$1" + fone);
});
答案 3 :(得分:0)
您需要将g
标记添加到match all instances of the pattern,因此您的正则表达式将如下所示:
/device=.*/g
,您的代码将如下所示:
this.href = this.href.replace(/device=.*/g,"device="+ fone);
答案 4 :(得分:0)
原因是除非所有链接都以“/ device =”开头。正则表达式不会工作。
you need to use /.*device=.*/
缺乏全球旗帜不是问题。它是你模式中的反斜杠。