Usando javascript, mi objetivo es consultar la URL y agregar parámetros a todos los enlaces en una página. Si el enlace ya contiene un parámetro, el enlace agregará los nuevos parámetros:
Página de acceso de usuario: https://example.com/?location=brazil
El enlace en la página era: https://link.com/?hello=ok
El enlace se convierte en: https://link.com/?hello=ok&location=brazil
Si no hay un parámetro anterior en el enlace, se convierte en:
https://link.com/?location=brasil
Probé el siguiente código:
var queryString = new URL(window.location).search; document.querySelectorAll("[href]").forEach(link => { var current = link.href; link.href = current + queryString; }); </script> Pero cuando un enlace ya contiene un parámetro, usa ? en lugar de & por lo que se convierte en:
https://link.com/?hello=ok?location=brasil
¿Cómo soluciono este problema?
¿Podría comprobar si la variable queryString contiene un ? y reemplácelo con un & en su lugar.
Así que tu código sería algo así como
var queryString = new URL(window.location).search; document.querySelectorAll("[href]").forEach(link => { var current = link.href; const queryStrToUse = queryString.replace('?', '&') link.href = current + queryStrToUse; });No es una buena idea cambiar el atributo ancla href con javascript por muchas razones, pero si es necesario, puede hacerlo:
document.querySelectorAll("a").forEach(link => { link.href = link.href.includes("?") ? link.href + queryString.replace("?", "&") : link.href + queryString; });var queryString = new URL(window.location).search; document.querySelectorAll("[href]").forEach(link => { var current = link.href; link.href = `${current}${current.includes('?') ? queryString.replace('?', '&') : queryString}`; });