Иногда бывает нужно получить переменную из текущего url в программе JavaScript. Получить значение всего url можно легко, просто прочитав document.location, но что если в адресе есть много переменных, а нужна одна конкретная.
Получить значение нужной переменной из текущего адреса на JavaScript
Выполнить эту задачу можно с помощью нехитрой простой функции:
var test = getURLVar('test'); function getURLVar(key) { var query = String(document.location.href).split('?'); if (query[1]) { var part = query[1].split('&'); for (i = 0; i < part.length; i++) { var data = part[i].split('='); if (data[0] == key && data[1]) return data[1]; } } return ''; }
Если переменной в запросе нет или ее значение не задано, функция вернет пустую строку.
Другой вариант, более продвинутый, так сказать, получения переменной из url:
var test = getURLVar('test'); function getURLVar(key) { var vars = location.search.substr(1).split('&').reduce(function(res, a) { var t = a.split('='); res[decodeURIComponent(t[0])] = t.length == 1 ? null : decodeURIComponent(t[1]); return res; }, {}); return vars[key] ? vars[key] : ''; }
Получить get переменные из текущего адреса в виде массива на JavaScript
Очень полезная функция, код которой предложил Андрей в комментариях ниже, за что ему спасибо.
function getURLVarArr() { var data = []; var query = String(document.location.href).split('?'); if (query[1]) { var part = query[1].split('&'); for (i = 0; i < part.length; i++) { var dat = part[i].split('='); data[dat[0]] = dat[1]; } } return data; }
Эту же функцию с пояснениями можете посмотреть ниже в комментарии Андрея.
Бывает еще обратная задача, когда нужно получить не конкретную переменную, а наоборот, все кроме указанной:
Получить адресную строку без указанной переменной на JavaScript
Код функции будет такой:
var url = getURLWithoutVar('test'); function getURLWithoutVar(key) { var url = ''; var vars = location.search.substr(1).split('&').reduce(function(res, a) { var t = a.split('='); if (key != decodeURIComponent(t[0])) url += '&' + a; }, {}); return url != '' ? location.origin + location.pathname + '?' + url.substr(1) : location.href; }
Если переменной в адресной строке нет, тогда функция вернет всю строку со всеми переменными.
Комментарии к статье:
'Если переменной в адресной строке нет, тогда функция вернет всю строку со всеми переменными'
Например, если у нас адресная строка содержит aa=1&bb=2&page=3 и мы хотим получить все переменные без переменной page, то функция getURLWithoutVar как раз для этого, она вернет aa=1&bb=2.
Но что будет, если для нашего примера мы передадим в функцию, скажем переменную cc, которой нет в адресной строке? функция вернет всю строку со всеми переменными, т.к. ей нечего исключить.
Об этом про функцию getURLWithoutVar и говорит предложение "Если переменной в адресной строке нет, тогда функция вернет всю строку со всеми переменными".
Добавить комментарий: