Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

jQuery replace href value but only partially? [duplicate]

Possible Duplicate:
Change href parameter using jQuery

I have a page with several links like this:

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

So after PHP page loads it will look like:

<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">
...

I want partially change the href for the sl value of all links using jQuery (sl value is picked from a slider = data.value)

I have this:

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

And now I do not know how to use replace with regular expressions as I think it is the solution!

like image 678
Pedro P Avatar asked Jan 13 '13 14:01

Pedro P


3 Answers

You might do

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

to replace the value of sl by 'newval'.

You can also use a function to build the new value. For example, say you want to multiply by 2 the old sl value, you may do this :

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

You may even avoid using each :

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

Demonstration (over the links to see the href)

like image 107
Denys Séguret Avatar answered Sep 22 '22 01:09

Denys Séguret


How about using the overload of attr that takes a callback function:

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

Inside of the function, this is equal to the current <a> tag, so you could determine what value to use there.

Example: http://jsfiddle.net/6zAN7/5/

like image 29
Andrew Whitaker Avatar answered Sep 18 '22 01:09

Andrew Whitaker


Try this, long code for understanding...

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

Using regex:

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

    var _href = $(this).attr('href'); 
    _href = _href.replace(/sl=[^&]+/, 'sl=' + slider_value);
});
like image 41
ATOzTOA Avatar answered Sep 22 '22 01:09

ATOzTOA