Еще одно предложение.
Уже есть несколько хороших ответов, но я нашел их излишне сложными и трудными для понимания. Это короткий, простой и возвращает простой ассоциативный массив с именами ключей, соответствующими именам токенов в URL.
Я добавил версию с комментариями ниже для тех, кто хочет учиться.
Обратите внимание, что для его цикла используется jQuery ($ .each), который я рекомендую вместо forEach. Я считаю, что проще обеспечить кросс-браузерную совместимость, используя jQuery по всем направлениям, вместо того, чтобы включать отдельные исправления для поддержки любых новых функций, которые не поддерживаются в старых браузерах.
Редактировать: После того, как я написал это, я заметил ответ Эрика Эллиотта, который почти такой же, хотя он использует forEach, хотя я вообще против (по причинам, изложенным выше).
function getTokens(){
var tokens = [];
var query = location.search;
query = query.slice(1);
query = query.split('&');
$.each(query, function(i,value){
var token = value.split('=');
var key = decodeURIComponent(token[0]);
var data = decodeURIComponent(token[1]);
tokens[key] = data;
});
return tokens;
}
Комментируемая версия:
function getTokens(){
var tokens = []; // new array to hold result
var query = location.search; // everything from the '?' onward
query = query.slice(1); // remove the first character, which will be the '?'
query = query.split('&'); // split via each '&', leaving us an array of something=something strings
// iterate through each something=something string
$.each(query, function(i,value){
// split the something=something string via '=', creating an array containing the token name and data
var token = value.split('=');
// assign the first array element (the token name) to the 'key' variable
var key = decodeURIComponent(token[0]);
// assign the second array element (the token data) to the 'data' variable
var data = decodeURIComponent(token[1]);
tokens[key] = data; // add an associative key/data pair to our result array, with key names being the URI token names
});
return tokens; // return the array
}
В приведенных ниже примерах мы будем использовать этот адрес:
http://www.example.com/page.htm?id=4&name=murray
Вы можете присвоить токены URL своей переменной:
var tokens = getTokens();
Затем обратитесь к каждому URL-токену по имени, например:
document.write( tokens['id'] );
Это напечатало бы "4".
Вы также можете просто обратиться к имени токена непосредственно из функции:
document.write( getTokens()['name'] );
... что напечатало бы "Мюррей".