por - ¿Cómo reemplazar el parámetro url con javascript/jquery?
pasar variables de un script a otro javascript (9)
He estado buscando una manera eficiente de hacer esto pero no he podido encontrarlo, básicamente lo que necesito es que, dado este URL, por ejemplo:
http://localhost/mysite/includes/phpThumb.php?src=http://media2.jupix.co.uk/v3/clients/4/properties/795/IMG_795_1_large.jpg&w=592&aoe=1&q=100
Me gustaría poder cambiar la URL en el parámetro src
con otro valor usando javascript o jquery, ¿es esto posible?
Gracias por adelantado.
¿No sería esta una mejor solución?
var text = ''http://localhost/mysite/includes/phpThumb.php?src=http://media2.jupix.co.uk/v3/clients/4/properties/795/IMG_795_1_large.jpg&w=592&aoe=1&q=100'';
var newSrc = ''www.google.com'';
var newText = text.replace(/(src=).*?(&)/,''$1'' + newSrc + ''$2'');
EDITAR:
agregó algo de claridad en el código y mantuvo ''src'' en el enlace resultante
$1
representa la primera parte dentro de ()
(ie) src=
y $2
representa la segunda parte dentro de ()
(ie) &
, así que esto indica que va a cambiar el valor entre src
y &
. Más claro, debería ser así:
src=''changed value''& // this is to be replaced with your original url
Además de @stenix, esto funcionó perfectamente para mí
url = window.location.href;
paramName = ''myparam'';
paramValue = $(this).val();
var pattern = new RegExp(''(''+paramName+''=).*?(&|$)'')
var newUrl = url.replace(pattern,''$1'' + paramValue + ''$2'');
var n=url.indexOf(paramName);
alert(n)
if(n == -1){
newUrl = newUrl + (newUrl.indexOf(''?'')>0 ? ''&'' : ''?'') + paramName + ''='' + paramValue
}
window.location.href = newUrl;
Aquí no es necesario guardar la variable "url", simplemente reemplace en la URL actual
Aquí está el código de stenix modificado, no es perfecto pero maneja casos donde hay un parámetro en url que contiene el parámetro provisto, como:
/search?searchquery=text and ''query'' is provided.
En este caso, se cambia el valor de paraque searchquery.
Código:
function replaceUrlParam(url, paramName, paramValue){
var pattern = new RegExp(''(//?|//&)(''+paramName+''=).*?(&|$)'')
var newUrl=url
if(url.search(pattern)>=0){
newUrl = url.replace(pattern,''$1$2'' + paramValue + ''$3'');
}
else{
newUrl = newUrl + (newUrl.indexOf(''?'')>0 ? ''&'' : ''?'') + paramName + ''='' + paramValue
}
return newUrl
}
JavaScript ahora proporciona una funcionalidad muy útil para manejar los parámetros de url: URLSearchParams
var searchParams = new URLSearchParams(window.location.search);
searchParams.set(''src'',''newSrc'')
var newParams = searchParams.toString()
La siguiente solución combina otras respuestas y maneja algunos casos especiales:
- El parámetro no existe en la URL original
- El parámetro es el único parámetro
- El parámetro es primero o último
- El nuevo valor de parámetro es el mismo que el anterior
- La url termina con a
?
personaje -
/b
asegura que otro parámetro que termine con paramName no se corresponda
Solución:
function replaceUrlParam(url, paramName, paramValue)
{
if (paramValue == null) {
paramValue = '''';
}
var pattern = new RegExp(''//b(''+paramName+''=).*?(&|#|$)'');
if (url.search(pattern)>=0) {
return url.replace(pattern,''$1'' + paramValue + ''$2'');
}
url = url.replace(/[?#]$/,'''');
return url + (url.indexOf(''?'')>0 ? ''&'' : ''?'') + paramName + ''='' + paramValue;
}
Limitaciones conocidas
- No borra un parámetro al establecer paramValue en nulo, en cambio lo establece en una cadena vacía. Consulte https://.com/a/25214672 si desea eliminar el parámetro.
Qué tal algo como esto:
<script>
function changeQueryVariable(keyString, replaceString) {
var query = window.location.search.substring(1);
var vars = query.split("&");
var replaced = false;
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == keyString) {
vars[i] = pair[0] + "="+ replaceString;
replaced = true;
}
}
if (!replaced) vars.push(keyString + "=" + replaceString);
return vars.join("&");
}
</script>
Si miras de cerca verás dos cosas sorprendentes sobre las URL: (1) parecen simples, pero los detalles y casos de esquina son realmente difíciles, (2) Sorprendentemente, JavaScript no proporciona una API completa para facilitar el trabajo con ellos. . Creo que una biblioteca hecha y derecha es para evitar que las personas reinventen la rueda ellos mismos o que copien algún fragmento de código regex ingenioso, pero con errores. Tal vez intente con URI.js ( http://medialize.github.io/URI.js/ )
UpdatE: conviértelo en una buena función para usted: http://jsfiddle.net/wesbos/KH25r/1/
function swapOutSource(url, newSource) {
params = url.split(''&'');
var src = params[0].split(''='');
params.shift();
src[1] = newSource;
var newUrl = ( src.join(''='') + params.join(''&''));
return newUrl;
}
¡Entonces ve!
var newUrl = swapOutSource("http://localhost/mysite/includes/phpThumb.php?src=http://media2.jupix.co.uk/v3/clients/4/properties/795/IMG_795_1_large.jpg&w=592&aoe=1&q=100","http://link/to/new.jpg");
console.log(newUrl);
var href = new URL(''https://google.com?q=cats'');
href.searchParams.set(''q'', ''dogs'');
console.log(href.toString()); // https://google.com/?q=dogs