jQuery替换href值但只是部分?

时间:2013-01-13 14:10:00

标签: javascript jquery regex replace href

  

可能重复:
  Change href parameter using jQuery

我有一个包含以下几个链接的页面:

<a href="playcats.php?cat='.$catname.'&sl=10" class="golink">

因此,在PHP页面加载后,它将如下所示:

<a href="playcats.php?cat=blue&sl=10" class="golink">
<a href="playcats.php?cat=red&sl=10" class="golink">
<a href="playcats.php?cat=yellow&sl=10" class="golink">
...

我想使用jQuery部分更改所有链接的sl值的href(从滑块中选择sl值= data.value)

我有这个:

$(document).ready(function() {
  $('a.golink').each(function() {
    var _href = $(this).attr('href'); 
    $(this).  ( rest of code.. )
  } );
});

现在我不知道如何使用正则表达式替换,因为我认为这是解决方案!

3 个答案:

答案 0 :(得分:8)

你可以做

 $(this).attr('href', _href.replace(/sl=[^&]+/, 'sl=newval'));

用'newval'替换sl的值。

您还可以使用函数来构建新值。例如,假设您想要将旧的sl值乘以2,您可以这样做:

 $(this).attr('href', _href.replace(/sl=([^&]+)/, function(_, oldval) {
      return 'sl='+(2*parseInt(oldval,10))
 }));

您甚至可以避免使用each

$('a.golink').attr('href', function(i, v){
  return v.replace(/sl=([^&]+)/, function(_, oldval) {
      return 'sl='+(2*parseInt(oldval,10))
  })
});

Demonstration(通过链接查看href)

答案 1 :(得分:3)

如何使用带有回调函数的attr的重载:

$("a.golink").attr("href", function (_, val) {
    return val.replace(/sl=\d+/gi, "sl=new_value");
});

在函数内部,this等于当前<a>标记,因此您可以确定在那里使用的值。

示例: http://jsfiddle.net/6zAN7/5/

答案 2 :(得分:2)

试试这个长代码来理解......

$('a').each(function(){
    // Change this to get slider value
    slider_value = 25;

    var _href = $(this).attr('href'); 
    _href = _href.split("&");
    _href[_href.length] = "sl=" + slider_value;
    _href = _href.join("&");

    console.log(_href);
});

使用正则表达式:

$('a').each(function(){
    // Change this to get slider value
    slider_value = 25;

    var _href = $(this).attr('href'); 
    _href = _href.replace(/sl=[^&]+/, 'sl=' + slider_value);
});