Actualmente esto es totalmente trivial, porque el objeto de ubicación javascript ya se ocupa de esto. Sólo encapsular esta sola línea en una función para volver a usarlo con enlaces etc:
<script>
function addParam(v) {
window.location.search += '&' + v;
}
</script>
<a href="javascript:addParam('priceMin=300');">add priceMin=300</a>
No hay necesidad de comprobar si hay ?
como esto ya es la parte search
y sólo tiene que añadir el parámetro.
Si no desea incluso hacer uso de una función se puede escribir como tan:
<a href="javascript:location.search+='&priceMin=300';">add priceMin=300</a>
Tenga en cuenta que esto es exactamente lo que has pedido para: Para añadir ese parámetro específico. Ya puede ser parte de la parte search
porque puede tener el mismo parámetro más de una vez en un URI. Es posible que desee normalizar eso dentro de su aplicación, pero ese es otro campo. Centralizaría la normalización de URL en una función propia.
Editar:
En la discusión sobre la respuesta aceptada anterior se hizo evidente, que las siguientes condiciones se deben cumplir para obtener una función de trabajo:
- si el parámetro ya existe, lo que debería ser cambiado.
- si el parámetro ya existe varias veces, solo la copia modificada debería sobrevivir.
- si el parámetro ya existe, pero no tiene ningún valor, se debe establecer el valor.
Como search
ya proporciona la cadena de búsqueda, lo único que queda para lograr es procesarla y consulta de información parte en el nombre y valor de pares, cambiar o añadir el nombre de falta y el valor y luego añadir de nuevo a search
:
<script>
function setParam(name, value) {
var l = window.location;
/* build params */
var params = {};
var x = /(?:\??)([^=&?]+)=?([^&?]*)/g;
var s = l.search;
for(var r = x.exec(s); r; r = x.exec(s))
{
r[1] = decodeURIComponent(r[1]);
if (!r[2]) r[2] = '%%';
params[r[1]] = r[2];
}
/* set param */
params[name] = encodeURIComponent(value);
/* build search */
var search = [];
for(var i in params)
{
var p = encodeURIComponent(i);
var v = params[i];
if (v != '%%') p += '=' + v;
search.push(p);
}
search = search.join('&');
/* execute search */
l.search = search;
}
</script>
<a href="javascript:setParam('priceMin', 300);">add priceMin=300</a>
Esto al menos es un poco más robusto, ya que puede hacer frente a las URL como éstas:
test.html?a?b&c&test=foo&priceMin=300
O incluso:
test.html?a?b&c&test=foo&pri%63eMin=300
Además, el nombre y el valor agregados siempre están codificados correctamente. Donde esto podría fallar es si el nombre de un parámetro da como resultado una etiqueta de propiedad ilegal js.
algún motivo no se puede generar el lado del servidor o utilizar un enlace ¿formulario web? – zzzzBov
Estoy de acuerdo con @zzzzBov, luego puede convertir su filtro de precio mínimo en un enlace dinámico. – iLLin
Hay muchos filtros en mi sitio web como el nombre de marca, rango de precios, ordenar por popularidad, ordenar por precio y muchos otros. Para generar la URL en el lado del servidor se necesitan muchas instrucciones 'if-else' y se generará una carga innecesaria en el servidor. Estoy buscando específicamente el cambio de URL en el lado del cliente. ¡Gracias! –