【问题标题】:jQuery replace href value but only partially? [duplicate]jQuery替换href值但只是部分? [复制]
【发布时间】:2012-12-27 13:48:54
【问题描述】:

可能重复:
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.. )
  } );
});

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

【问题讨论】:

  • 你的第一个链接,它是通​​过循环打印的吗?

标签: javascript jquery regex replace href


【解决方案1】:

你可能会这样做

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

Demonstration(通过链接查看href)

【讨论】:

  • 太棒了! ...完美运行。也非常感谢这里显示的额外功能,也可能对我的项目有用。谢谢!!
  • @PedroP 另请参阅我给出的第三个解决方案,避免使用 each。
  • ty 再次破坏,你认为使用第三种解决方案更好吗?
  • 我个人更喜欢这个解决方案,但你可能在each 中有其他事情要做,我认为这并不重要。
  • 我将使用这第三种解决方案,因为每个解决方案都没有更多的事情要做。只是为了替换这个href。谢谢!
【解决方案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);
});

【讨论】:

    【解决方案3】:

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

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

    在函数内部,this 等于当前的&lt;a&gt; 标签,因此您可以确定在那里使用什么值。

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

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-19
      • 2015-12-18
      • 2012-10-26
      相关资源
      最近更新 更多