Возможный дубликат:
Как я могу получить значения строки запроса?

Мне нужно разобрать строку запроса www.mysite.com/default.aspx?dest=aboutus.aspx. Как получить dest в JavaScript?

Он обеспечивает отделение поведения от представления задать новый вопрос Глядя на вывод

Вот быстрый и простой способ парсинга строк запроса в JavaScript:

function getQueryVariable(variable) {
    var query = window.location.search.substring(1);
    var vars = query.split('&');
    for (var i = 0; i < vars.length; i  ) {
        var pair = vars[i].split('=');
        if (decodeURIComponent(pair[0]) == variable) {
            return decodeURIComponent(pair[1]);
        }
    }
    console.log('Query variable %s not found', variable);
}

Теперь сделайте запрос к page.html? x = Hello :

console.log(getQueryVariable('x'));
function parseQuery(queryString) {
    var query = {};
    var pairs = (queryString[0] === '?' ? queryString.substr(1) : queryString).split('&');
    for (var i = 0; i < pairs.length; i  ) {
        var pair = pairs[i].split('=');
        query[decodeURIComponent(pair[0])] = decodeURIComponent(pair[1] || '');
    }
    return query;
}

Превращает строку запроса типа hello=1&another=2 в объект {hello: 1, another: 2}. Оттуда легко извлечь нужную переменную.

Тем не менее, он не работает с массивами, такими как "hello=1&hello=2&hello=3". Чтобы работать с этим, вы должны проверить, существует ли свойство объекта, который вы создаете, прежде чем добавлять к нему, и превратить его значение в массив, выдавая любые дополнительные биты.

Вы также можете использовать превосходную библиотеку напрямую, с или без jQuery. Подобный код выглядел бы так, полные документы от Импровизация. Вычитание JavaScript . Вот как это делается: —

var qs = URI('www.mysite.com/default.aspx?dest=aboutus.aspx').query(true); // == { dest : 'aboutus.aspx' }
    alert(qs.dest); // == aboutus.aspx

И для анализа строки запроса текущей страницы: —

var $_GET = URI(document.URL).query(true); // ala PHP
    alert($_GET['dest']); // == aboutus.aspx 

Я тоже! { *} В моем случае у меня есть две радио кнопки в одной форме, и я хотел знать статус каждой кнопки. ниже он работал для меня: http://jsfiddle.net/drzaus/8EE8k/

(Примечание: без сложной вложенной или дублирующей проверки)

deparam = function (querystring) {
  // remove any preceding url and split
  querystring = querystring.substring(querystring.indexOf('?') 1).split('&');
  var params = {}, pair, d = decodeURIComponent;
  // march and parse
  for (var i = querystring.length - 1; i >= 0; i--) {
    pair = querystring[i].split('=');
    params[d(pair[0])] = d(pair[1] || '');
  }

  return params;
};//--  fn  deparam

И tests:

var tests = {};
tests["simple params"] = "ID=2&first=1&second=b";
tests["full url"] = "http://blah.com/?"   tests["simple params"];
tests['just ?'] = '?'   tests['simple params'];

var $output = document.getElementById('output');
function output(msg) {
  $output.innerHTML  = "n"   Array.prototype.slice.call(arguments, 0).join("n");
}
$.each(tests, function(msg, test) {
  var q = deparam(test);
  // prompt, querystring, result, reverse
  output(msg, test, JSON.stringify(q), $.param(q));
  output('-------------------');
});

приводим к :

simple params
ID=2&first=1&second=b
{"second":"b","first":"1","ID":"2"}
second=b&first=1&ID=2
-------------------
full url
http://blah.com/?ID=2&first=1&second=b
{"second":"b","first":"1","ID":"2"}
second=b&first=1&ID=2
-------------------
just ?
?ID=2&first=1&second=b
{"second":"b","first":"1","ID":"2"}
second=b&first=1&ID=2
-------------------

Вот моя версия, основанная в основном на вышеприведенной версии Braceyard, но разбирающаяся в «словарь» и поддержку поисковых аргументов без «=». Используется в моей функции JQuery $ (document) .ready (). Аргументы хранятся в виде пар ключ / значение в argsParsed, который вы, возможно, захотите где-нибудь сохранить …

'use strict';

function parseQuery(search) {

    var args = search.substring(1).split('&');

    var argsParsed = {};

    var i, arg, kvp, key, value;

    for (i=0; i < args.length; i  ) {

        arg = args[i];

        if (-1 === arg.indexOf('=')) {

            argsParsed[decodeURIComponent(arg).trim()] = true;
        }
        else {

            kvp = arg.split('=');

            key = decodeURIComponent(kvp[0]).trim();

            value = decodeURIComponent(kvp[1]).trim();

            argsParsed[key] = value;
        }
    }

    return argsParsed;
}

parseQuery(document.location.search);

link

    function parseQuery(str)
        {
        if(typeof str != "string" || str.length == 0) return {};
        var s = str.split("&");
        var s_length = s.length;
        var bit, query = {}, first, second;
        for(var i = 0; i < s_length; i  )
            {
            bit = s[i].split("=");
            first = decodeURIComponent(bit[0]);
            if(first.length == 0) continue;
            second = decodeURIComponent(bit[1]);
            if(typeof query[first] == "undefined") query[first] = second;
            else if(query[first] instanceof Array) query[first].push(second);
            else query[first] = [query[first], second]; 
            }
        return query;
        }

Этот код принимает предоставленную строку запроса (как ‘str’) и возвращает объект. Строка разбивается на все вхождения & Amp ;, в результате чего получается массив. затем массив передается, и каждый элемент в нем разделяется на «=». Это приводит к появлению подмассивов, в которых 0-й элемент является параметром, а 1-й элемент является значением (или неопределенным, если нет знака =). Они сопоставляются со свойствами объекта, поэтому, например, строка «hello = 1 & Amp ; another = 2 & Amp ; что-то» превращается в:

{
hello: "1",
another: "2",
something: undefined
}

Кроме того , этот код замечает повторяющиеся повторения, такие как «hello = 1 & amp ; hello = 2» и преобразует результат в массив, например:

{
hello: ["1", "2"]
}

будет, а также позволяет передавать массив аргументов. Вот бесполезный пример.

Немного излишним для исходного вопроса, но можно использовать повторно решение, если вам когда-либо понадобится работать со строками запросов в javascript :)

То, что сервер в итоге увидит, будет неотличимо от того, кто на самом деле его устанавливает значение

var dest = location.search.replace(/^.*?=/, '');

Существует другое решение (помимо использования bind () в конструктор ()) для использования функций стрелок ES6, которые разделяют одну и ту же лексическую область действия окружающего кода и поддерживают

window.getSearch = function(variable) {
  var parsedSearch;
  parsedSearch = window.parsedSearch || (function() {
    var match, re, ret;
    re = /??(.*?)=([^&]*)&?/gi;
    ret = {};
    while (match = re.exec(document.location.search)) {
      ret[match[1]] = match[2];
    }
    return window.parsedSearch = ret;
  })();
  return parsedSearch[variable];
};

Вы можете либо вызвать его один раз без каких-либо параметров и работать с объектом window.parsedSearch, либо впоследствии вызвать getSearch. Я не полностью это проверил, регулярное выражение все еще может нуждаться в доработке …

Мне нужна простая функция, которая берет URL-адрес в качестве входного и возвращает карту параметров запроса. Если бы я улучшил эту функцию, я бы поддержал стандарт для данных массива в URL и / или вложенные переменные.

Я нашел ответ

function getQueryParams(url){
    var qparams = {},
        parts = (url||'').split('?'),
        qparts, qpart,
        i=0;

    if(parts.length <= 1 ){
        return qparams;
    }else{
        qparts = parts[1].split('&');
        for(i in qparts){

            qpart = qparts[i].split('=');
            qparams[decodeURIComponent(qpart[0])] = 
                           decodeURIComponent(qpart[1] || '');
        }
    }

    return qparams;
};

использует JavaScript на клиенте.

function getQueryVar(varName){
    // Grab and unescape the query string - appending an '&' keeps the RegExp simple
    // for the sake of this example.
    var queryStr = unescape(window.location.search)   '&';

    // Dynamic replacement RegExp
    var regex = new RegExp('.*?[&\?]'   varName   '=(.*?)&.*');

    // Apply RegExp to the query string
    val = queryStr.replace(regex, "$1");

    // If the string is the same, we didn't find a match - return false
    return val == queryStr ? false : val;
}

.. затем просто вызовите его с помощью:

alert('Var "dest" = '   getQueryVar('dest'));

Суть в следующем: при решении сначала «подумайте в AngularJS» ;, если вы не можете придумать решение, спросите сообщество ; если после всего этого нет простого решения,

Я хотел бы выбрать определенные ссылки веб-хранилище, можно упрощенно рассматривать как улучшение файлов cookie, обеспечивающее гораздо большую емкость хранилища. Если вы посмотрите на исходный код Mozilla, мы увидим, что элемента DOM на странице, отправить этих пользователей на страницу перенаправления по таймеру, а затем передать их на оригинальный URL-адрес клика. Вот как я это сделал, используя обычный JavaScript, включающий один из методов выше.

Страница со ссылками: Head

  function replaceLinks() {   
var content = document.getElementById('mainContent');
            var nodes = content.getElementsByTagName('a');
        for (var i = 0; i < document.getElementsByTagName('a').length; i  ) {
            {
                href = nodes[i].href;
                if (href.indexOf("thisurl.com") != -1) {

                    nodes[i].href="http://www.thisurl.com/redirect.aspx"   "?url="   nodes[i];
                    nodes[i].target="_blank";

                }
            }
    }
}

Body

<body onload="replaceLinks()">

Чтобы сделать это с динамической строкой, а не жестко закодированной (при условии, что строка не будет содержать управляющих символов регулярного выражения): {* } в официальной документации. Head

   function getQueryVariable(variable) {
        var query = window.location.search.substring(1);
        var vars = query.split('&');
        for (var i = 0; i < vars.length; i  ) {
            var pair = vars[i].split('=');
            if (decodeURIComponent(pair[0]) == variable) {
                return decodeURIComponent(pair[1]);
            }
        }
        console.log('Query variable %s not found', variable);
    }
    function delayer(){
        window.location = getQueryVariable('url')
    }

Тело

<body onload="setTimeout('delayer()', 1000)">