Monday, May 20, 2024
 Popular · Latest · Hot · Upcoming
129
rated 0 times [  131] [ 2]  / answers: 1 / hits: 16464  / 13 Years ago, mon, october 3, 2011, 12:00:00

So I am wanting to replace GET variable values in a url and if the variable does not exist, then add it to the url.



EDIT: I am doing this to a elements href not the pages current location..



I am not good with javascript but I do know how to use jQuery quite well and the basics of javascript. I do know how to write regex but not how to use the javascript syntax of regex and what functions to use it with.



Here is what I have so far and it does have an error on line 3: See it on jsfiddle(or below): http://jsfiddle.net/MadLittleMods/C93mD/



function addParameter(url, param, value) {
var pattern = new RegExp(param + '=(.*?);', 'gi');
return url.replace(pattern, param + '=' + value + ';');

alert(url);
}

More From » variables

 Answers
144

No need to use jQuery on this one. Regular Expressions and string functions are sufficient. See my commented code below:



function addParameter(url, param, value) {
// Using a positive lookahead (?==) to find the
// given parameter, preceded by a ? or &, and followed
// by a = with a value after than (using a non-greedy selector)
// and then followed by a & or the end of the string
var val = new RegExp('(\?|\&)' + param + '=.*?(?=(&|$))'),
parts = url.toString().split('#'),
url = parts[0],
hash = parts[1]
qstring = /?.+$/,
newURL = url;

// Check if the parameter exists
if (val.test(url))
{
// if it does, replace it, using the captured group
// to determine & or ? at the beginning
newURL = url.replace(val, '$1' + param + '=' + value);
}
else if (qstring.test(url))
{
// otherwise, if there is a query string at all
// add the param to the end of it
newURL = url + '&' + param + '=' + value;
}
else
{
// if there's no query string, add one
newURL = url + '?' + param + '=' + value;
}

if (hash)
{
newURL += '#' + hash;
}

return newURL;
}


And here is the Fiddle



Update:



The code now handles the case where there is a hash on the URL.



Edit



Missed a case! The code now checks to see if there is a query string at all.


[#89812] Friday, September 30, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
adriannemyiag

Total Points: 504
Total Questions: 105
Total Answers: 99

Location: Ecuador
Member since Thu, Apr 22, 2021
3 Years ago
;