Javascript 使用jQuery更改href值

Javascript 使用jQuery更改href值,javascript,jquery,Javascript,Jquery,如何使用jQuery重写href值 我有一个默认城市的链接 <a href="/search/?what=parks&city=Paris">parks</a> <a href="/search/?what=malls&city=Paris">malls</a> 像这样: var newCity = $("#city").val(); $('a').attr('href', '/search/?what=parks&ci

如何使用jQuery重写href值

我有一个默认城市的链接

<a href="/search/?what=parks&city=Paris">parks</a>
<a href="/search/?what=malls&city=Paris">malls</a>
像这样:

var newCity = $("#city").val();

$('a').attr('href', '/search/?what=parks&city=' + newCity);

编辑:添加了搜索字符串

只要在
#city
输入字段中释放一个键,就会更新
href

 $('a').attr("href", "/search/?what=parks&city=" + newCity);
$('#city').keyup(function(){

    $('a').attr('href','/search/?what=parks&city='+$(this).val());

});

如果您有唯一的
href
值(
?what=parks
?what=malls
),我建议不要在
$.attr()方法中写入路径;您必须为每个唯一的
href
调用一次
$.attr()
,这将变得非常冗余,而且非常快,更不用说难以管理了

下面我将调用
$.attr()
,并使用一个函数仅将
&city=
部分替换为新城市。这种方法的好处是,这5行代码可以更新数百个链接,而不会破坏每个链接上剩余的
href

$("#city").change(function(o){
  $("a.malls").attr('href', function(i,a){
    return a.replace( /(city=)[a-z]+/ig, '$1'+o.target.value );
  });
});
您可能需要注意的一件事是空间和外壳。您可以使用
.toLowerCase()
JavaScript方法将所有内容转换为小写,您可以使用另一个对
.replace()
的调用替换空格,如下所示:

'$1'+o.target.value.replace(/\s+/, '');

在线演示:

这将替换整个URL,而不仅仅是
city
参数的值。谢谢,我很确定OP会解决这个问题。为什么不用正则表达式呢?从技术上讲,这不是更慢、更笨重吗?@AndyL因为明天的URL可能不是
/search/?what=parts&city=Paris
,而是
/search/?when=午后&what=parks&city=Paris
或其他变体。您不必去重写JavaScript来适应这些类型的更改;在我真诚的意见下,这将是太繁重了。@ Ryaz我已经重新分解了一点,以减少涉及的代码量。@安迪尔另一件需要考虑的事实是,用户有两个链接,有两个不同的URL结构。一个以
?what=parks
开头,另一个以
?what=malls
开头。我上面的方法将只关注
&city=[a-z]
部分,其余部分保持原样。如果我们覆盖整个路径,我们将用
?what=malls
覆盖
?what=parks
。还要知道,这个正则表达式还有一些地方需要改进。不支持在URL中允许作为参数的空格、空格编码、连字符、破折号或任何其他特殊字符(或特殊字符编码)。我建议对表单进行此操作,因为您现在的操作方式使您的搜索功能在没有javascript的情况下无法使用。谢谢!!好的。即使我做了一些改变。。。我在“输入”中添加了“onkeyup”回调。在这个回调函数中,我添加了代码。谢谢
'$1'+o.target.value.replace(/\s+/, '');