Я строю строку запроса в Javascript, основываясь на том, установлен флажок или нет.
Некоторые опции в флажках:
- "Годовой"
- "Grass"
- "Кустарник (вечнозеленый)"
- "Кустарник (лиственный)"
Я нашел в сети функцию, которая обновляет параметр url:
function updateUrlParameter(uri, key, value) {
value = value.replace(/\s/g, "%20");
var i = uri.indexOf('#');
var hash = i === -1 ? '' : uri.substr(i);
uri = i === -1 ? uri : uri.substr(0, i);
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (!value) {
// remove key-value pair if value is empty
uri = uri.replace(new RegExp("([&]?)" + key + "=.*?(&|$)", "i"), '');
if (uri.slice(-1) === '?') {
uri = uri.slice(0, -1);
}
} else {
console.log("value is " + value)
uri = uri + separator + key + "=" + value;
}
return uri + hash;
}
Используя вышеупомянутую функцию, если я установлю флажки для вышеупомянутых четырех, начиная сверху вниз, моя строка запроса станет
?plantType=Annual&plantType=Grass&plantType=Shrub%20(Evergreen)&plantType=Shrub%20(Deciduous
Почему функция игнорирует последний ')' в строке? Есть ли работа вокруг этого? Я хотел бы сохранить круглые скобки в строке запроса, потому что это облегчит запросы к базе данных.
Я создал функцию для перебора флажков ввода. Если они проверены, используйте функцию updateUrlParameter для обновления URI.
function getQueryString() {
var inputsContainerChildren = $('#floatingDivForFilter').children();
var input = document.createElement('input')
var uri = '';
for (var i = 0; i < inputsContainerChildren.length; i++) {
var currChild = inputsContainerChildren[i].firstElementChild;
if (currChild) {
if (currChild.tagName === 'INPUT') {
if (currChild.checked) {
var id = currChild.id;
console.log(uri)
uri = updateUrlParameter(uri, currChild.name, currChild.value);
}
}
}
}
console.log(uri);
}
На фото ниже показан снимок созданного URL. Я не могу понять, почему последний ')' отрублен.
url photo