jQuery如何部分替换href链接的值?

6

我有一个页面,其中有几个类似于以下链接:

可能是重复问题:
使用jQuery更改href参数

<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来部分更改所有链接的href属性值,将其更改为滑块(data.value)选择的sl值。

我目前的代码如下:

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

现在我不知道如何使用正则表达式来替换内容,但我认为这是解决问题的方法!


你的第一个链接,它是通过循环打印出来的吗? - Niraj Chauhan
3个回答

9

您可能会做

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

sl的值替换为'newval'。

您也可以使用函数构建新值。比如说,如果您想将旧的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))
  })
});

演示(在链接上悬停以查看href)


太棒了,毁掉!...完美运作。 还要感谢您在这里展示的额外功能,对我的项目也可能有用。 谢谢!! - Pedro P
@PedroP 请参考我提供的第三个解决方案,避免使用 each。 - Denys Séguret
再次感谢您,dystroy,您认为使用这种第三种解决方案比使用each方式更好吗? - Pedro P
个人而言,我更喜欢这种解决方案,但你的each可能还有其他事情要做,我认为这并不重要。 - Denys Séguret
我将使用这个第三个解决方案,因为在每个地方没有其他事情要做。只需要替换这个href。谢谢! - Pedro P

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

试试这个,为了更好地理解,这是一段长代码...

$('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);
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接