Обновлено: поддержка множественных значений
Часто при написание кода на JavaScript возникает необходимость получить из адреса определенный параметр. Особенно это актуально сейчас, когда сплош и рядом все делают одностраничные приложения.
Представим, что адрес выглядит вот так http://site.com/?search=sometext&page=100&abc=1&abc=qwe
. Нам необходимо получить значения параметров search
, page
и abc
. В JavaScript мы можем взять строку параметров из window.location.search
.
window.location.search // ?search=sometext&page=100&abc=1&abc=qwe
Далее мы можем разбить строку на элементы и затем использовать их. Но куда более логично написать небольшую утилиту, которая при запросе определенного параметра будет просто возвращать его значение.
Вот такой код написал я:
var getQueryParam = function getQueryParam (param) {
var queries = window.location.search, regex, resRegex, results, response;
param = encodeURIComponent(param);
regex = new RegExp('[\\?&]' + param + '=([^&#]*)', 'g');
resRegex = new RegExp('(.*)=([^&#]*)');
results = queries.match(regex);
if (!results) {
return '';
}
response = results.map(function (result) {
var parsed = resRegex.exec(result);
if (!parsed) {
return '';
}
return parsed[2].match(/(^\d+$)/) ? Number(parsed[2]) : parsed[2];
})
return response.length > 1 ? response : response[0];
};
Функция не только вовзращает значение, но и пытается определить, является ли значение числом.
getQueryParam('search') // текст 'sometext'
getQueryParam('page') // цифра '100'
getQueryParam('abc') // массив [1, 'qwe']