На самом деле это совершенно тривиально, потому что объект местоположения javascript уже имеет дело с этим. Просто заключите эту однострочную строку в функцию, чтобы снова использовать ее со ссылками и т. Д .:
<script>
function addParam(v) {
window.location.search += '&' + v;
}
</script>
<a href="javascript:addParam('priceMin=300');">add priceMin=300</a>
Нет необходимости проверять ?
, так как это уже часть search
, и вам нужно только добавить параметр.
Если вы не хотите даже использовать функцию, вы можете написать так:
<a href="javascript:location.search+='&priceMin=300';">add priceMin=300</a>
Имейте в виду, что это именно то, что вы просили: добавить этот конкретный параметр. Он уже может быть частью search
, потому что вы можете иметь один и тот же параметр более одного раза в URI. Возможно, вы захотите нормализовать это в вашем приложении, но это другая область. Я бы централизовал нормализацию URL в своей собственной функции.
Edit:
При обсуждении принятого ответа выше выяснилось, что для получения работающей функции должны быть выполнены следующие условия:
- если параметр уже существует, его следует изменить.
- , если параметр уже существует несколько раз, должна выжить только измененная копия.
- если параметр уже существует, но не имеет значения, значение должно быть установлено.
Поскольку search
уже предоставляет строку поиска, единственное, что остается сделать, - это проанализировать эту часть запроса информации в парах имя и значение, изменить или добавить отсутствующее имя и значение, а затем добавить его обратно к * 1029. *:
<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>
Это, по крайней мере, немного более надежно, так как может работать с такими URL-адресами:
test.html?a?b&c&test=foo&priceMin=300
Или даже:
test.html?a?b&c&test=foo&pri%63eMin=300
Кроме того, добавленные имя и значение всегда правильно кодируются. Это может привести к ошибке, если имя параметра приводит к недопустимой метке js свойства.