如何使用jQuery重写href值?
我有一些带有默认城市的链接。
<a href="/search/?what=parks&city=Paris">parks</a>
<a href="/search/?what=malls&city=Paris">malls</a>
如果用户在 #city 文本框中输入了一个值,我想用用户输入的值替换巴黎。
目前为止我已经有:
var newCity = $("#city").val();
如何使用jQuery重写href值?
我有一些带有默认城市的链接。
<a href="/search/?what=parks&city=Paris">parks</a>
<a href="/search/?what=malls&city=Paris">malls</a>
如果用户在 #city 文本框中输入了一个值,我想用用户输入的值替换巴黎。
目前为止我已经有:
var newCity = $("#city").val();
假设你有唯一的 href
值(?what=parks
和 ?what=malls
),我建议不要在 $.attr()
方法中写入路径;否则,你需要为每个唯一的 href
调用一次 $.attr()
,这将很快变得非常冗余和难以管理。
下面,我会使用一个函数替换掉 &city=
部分,只需调用一次 $.attr()
。这种方法的好处是,这五行代码可以更新数百个链接,而不破坏每个链接上其余的 href
值。
$("#city").change(function(o){
$("a.malls").attr('href', function(i,a){
return a.replace( /(city=)[a-z]+/ig, '$1'+o.target.value );
});
});
你可能需要注意的一件事就是空格和大小写。你可以使用JavaScript的.toLowerCase()
方法将所有内容转换为小写,并且可以像下面我所做的那样使用另一个.replace()
调用来替换空格:
'$1'+o.target.value.replace(/\s+/, '');
/search/?what=parts&city=Paris
,而是 /search/?when=afternoon&what=parks&city=Paris
或其他变体。你不应该去重写你的JavaScript来适应这些变化;在我真诚的意见中,这将会非常繁琐。 - Sampson?what=parks
开头,而另一个则为?what=malls
。我上面的方法只会关注&city=[a-z]
部分,将其余部分保持原样。如果我们覆盖整个路径,那么我们就会用?what=malls
来覆盖?what=parks
。 - Sampson $('a').attr("href", "/search/?what=parks&city=" + newCity);
#city
输入框中释放按键,href
将会被更新。$('#city').keyup(function(){
$('a').attr('href','/search/?what=parks&city='+$(this).val());
});
像这样:
var newCity = $("#city").val();
$('a').attr('href', '/search/?what=parks&city=' + newCity);
EDIT: Added the search string
city
参数的值。 - James Allardice