Как извлечь строку запроса из URL-адреса в javascript?
Спасибо!
Как извлечь строку запроса из URL-адреса в javascript?
Спасибо!
Вы можете легко создать коллекцию стиля словаря...
function getQueryStrings() {
var assoc = {};
var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); };
var queryString = location.search.substring(1);
var keyValues = queryString.split('&');
for(var i in keyValues) {
var key = keyValues[i].split('=');
if (key.length > 1) {
assoc[decode(key[0])] = decode(key[1]);
}
}
return assoc;
}
И используйте его вот так...
var qs = getQueryStrings();
var myParam = qs["myParam"];
Если вы ссылаетесь на URL-адрес в адресной строке, то
window.location.search
предоставит вам только часть строки запроса. Обратите внимание, что это включает знак вопроса в начале.
Если вы ссылаетесь на любой случайный URL-адрес, хранящийся в (например) строке, вы можете получить строку запроса, взяв подстроку, начинающуюся с индекса первого знака вопроса, выполнив что-то вроде:
url.substring(url.indexOf("?"))
Предполагается, что любые вопросительные знаки в фрагментарной части URL-адреса были правильно закодированы. Если в конце есть цель (т.е. #, За которой следует id элемента DOM), он также включит это.
Здесь используется метод...
function Querystring() {
var q = window.location.search.substr(1), qs = {};
if (q.length) {
var keys = q.split("&"), k, kv, key, val, v;
for (k = keys.length; k--; ) {
kv = keys[k].split("=");
key = kv[0];
val = decodeURIComponent(kv[1]);
if (qs[key] === undefined) {
qs[key] = val;
} else {
v = qs[key];
if (v.constructor != Array) {
qs[key] = [];
qs[key].push(v);
}
qs[key].push(val);
}
}
}
return qs;
}
Он возвращает объект строк и массивов и, похоже, работает достаточно хорошо. (Строки для одиночных ключей, массивы для одного и того же ключа с несколькими значениями.)
Вам нужно просто использовать следующую функцию.
function GetQueryStringByParameter(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
--- Как использовать ---
var QueryString= GetQueryStringByParameter('QueryString');
Очень прямолинейно!
function parseQueryString(){
var assoc = {};
var keyValues = location.search.slice(1).split('&');
var decode = function(s){
return decodeURIComponent(s.replace(/\+/g, ' '));
};
for (var i = 0; i < keyValues.length; ++i) {
var key = keyValues[i].split('=');
if (1 < key.length) {
assoc[decode(key[0])] = decode(key[1]);
}
}
return assoc;
}
Работает для меня -
function querySt(Key) {
var url = window.location.href;
KeysValues = url.split(/[\?&]+/);
for (i = 0; i < KeysValues.length; i++) {
KeyValue= KeysValues[i].split("=");
if (KeyValue[0] == Key) {
return KeyValue[1];
}
}
}
function GetQString(Key) {
if (querySt(Key)) {
var value = querySt(Key);
return value;
}
}
В браузерах есть новый API под названием URLSearchParams
, который позволяет извлекать и изменять значения строки запроса.
В настоящее время он поддерживается в Firefox 44+, Chrome 49+ и Opera 36 +.
Initialize/вход
Чтобы начать работу, создайте новый объект URLSearchParams. Для текущих реализаций вам нужно удалить "?" в начале строки запроса, используя slice(1)
в querystring, как предлагает Джейк Арчибальд:
var params = new URLSearchParams(window.location.search.slice(1)); // myParam=12
В последующих реализациях вы сможете использовать его без фрагмента:
var params = new URLSearchParams(window.location.search); // myParam=12
Get
Вы можете получить параметры из него с помощью метода .get
:
params.get('myParam'); // 12
Set
Парамы можно изменить с помощью .set
:
params.set('myParam', 'newValue');
Выход
И если текущая повторная процедура необходима снова, метод .toString
предоставляет ее:
params.toString(); // myParam=newValue
В этом API есть хост других методов.
Polyfill
Поскольку поддержка браузера по-прежнему довольно тонкая, есть small polyfill от Andrea Giammarchi (< 3kB).
Вы можете использовать этот Javascript:
function getParameterByName(name) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}
Вы также можете использовать плагин jQuery-URL-Parser позволяет извлекать все части URL-адреса, включая якорь, хост и т.д.
Использование очень простое и классное:
$.url().param("itemID")
через Джеймса и Альфа
Я использую этот метод
function getString()
{
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
return vars;
}
var buisnessArea = getString();