Построение поверх Ответ Майка Каузера Я сделал эту функцию, которая учитывает несколько параметров с одним и тем же ключом (foo=bar&foo=baz
), а также разделенные запятыми параметры (foo=bar,baz,bin
).Он также позволяет искать определенный ключ запроса.
function getQueryParams(queryKey) {
var queryString = window.location.search;
var query = {};
var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=');
var key = decodeURIComponent(pair[0]);
var value = decodeURIComponent(pair[1] || '');
// Se possui uma vírgula no valor, converter em um array
value = (value.indexOf(',') === -1 ? value : value.split(','));
// Se a key já existe, tratar ela como um array
if (query[key]) {
if (query[key].constructor === Array) {
// Array.concat() faz merge se o valor inserido for um array
query[key] = query[key].concat(value);
} else {
// Se não for um array, criar um array contendo o valor anterior e o novo valor
query[key] = [query[key], value];
}
} else {
query[key] = value;
}
}
if (typeof queryKey === 'undefined') {
return query;
} else {
return query[queryKey];
}
}
Пример ввода: foo.html?foo=bar&foo=baz&foo=bez,boz,buz&bar=1,2,3
Пример вывода
{
foo: ["bar","baz","bez","boz","buz"],
bar: ["1","2","3"]
}