Как получить значения строки запроса в JavaScript?

Существует ли способ получения значений строка запроса через jQuery (или без него) без использования плагина?

Если да, то как? Если нет, то существует ли плагин, который может это сделать?

Комментарии к вопросу (8)
Решение

Обновление: сентябрь-2018

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

const urlParams = new URLSearchParams(window.location.search);
const myParam = urlParams.get('myParam');

Оригинал

Вам не нужен jQuery для этой цели. Вы можете использовать просто чистый JavaScript:

function getParameterByName(name, url) {
    if (!url) url = window.location.href;
    name = name.replace(/[\[\]]/g, '\\$&');
    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, ' '));
}

Использование:

// query string: ?foo=lorem&bar=&baz
var foo = getParameterByName('foo'); // "lorem"
var bar = getParameterByName('bar'); // "" (present with empty value)
var baz = getParameterByName('baz'); // "" (present with no value)
var qux = getParameterByName('qux'); // null (absent)


Примечание: Если параметр присутствует несколько раз (?foo=lorem&foo=ipsum), вы получите первое значение (lorem). Стандарта на этот счет не существует, и его использование варьируется, см., например, этот вопрос: Авторитетная позиция дублирующих ключей HTTP GET запроса.
ПРИМЕЧАНИЕ: Функция чувствительна к регистру. Если вы предпочитаете нечувствительное к регистру имя параметра, добавьте модификатор 'i' к RegExp.


Это обновление, основанное на новой спецификации URLSearchParams для достижения того же результата более лаконично. См. ответ "URLSearchParams" ниже.

Комментарии (52)

Некоторые из размещенных здесь решений неэффективны. Повторять поиск по регулярному выражению каждый раз, когда скрипту требуется доступ к параметру, совершенно необязательно, достаточно одной единственной функции для разделения параметров на объект в стиле ассоциативного массива. Если вы не работаете с API истории HTML 5, это необходимо только один раз при загрузке страницы. Другие предложения здесь также не позволяют правильно декодировать URL-адрес.

переменные URL-адреса; (окно.onpopstate = функция () { матч ВАР ПЛ = /+/г, // regex для замены дополнение символ с пробелом поиск = /([^&=]+)=?([^&]*)/г расшифруйте = функция (х) { возвращение decodeURIComponent(s.replace(pl, " ")); }, = окно запроса.местоположение.поиск.

Комментарии (25)

ES2015 (ES6)

getQueryStringParams = query => {
    return query
        ? (/^[?#]/.test(query) ? query.slice(1) : query)
            .split('&')
            .reduce((params, param) => {
                    let [key, value] = param.split('=');
                    params[key] = value ? decodeURIComponent(value.replace(/\+/g, ' ')) : '';
                    return params;
                }, {}
            )
        : {}
};

Без jQuery

var qs = (function(a) {
    if (a == "") return {};
    var b = {};
    for (var i = 0; i < a.length; ++i)
    {
        var p=a[i].split('=', 2);
        if (p.length == 1)
            b[p[0]] = "";
        else
            b[p[0]] = decodeURIComponent(p[1].replace(/\+/g, " "));
    }
    return b;
})(window.location.search.substr(1).split('&'));

При URL вида ?topic=123&name=query+string будет получен следующий результат:

qs["topic"];    // 123
qs["name"];     // query string
qs["nothere"];  // undefined (object)

Google method#.

Разбирая код Google, я нашел метод, который они используют: getUrlParameters

function (b) {
    var c = typeof b === "undefined";
    if (a !== h && c) return a;
    for (var d = {}, b = b || k[B][vb], e = b[p]("?"), f = b[p]("#"), b = (f === -1 ? b[Ya](e + 1) : [b[Ya](e + 1, f - e - 1), "&", b[Ya](f + 1)][K](""))[z]("&"), e = i.dd ? ia : unescape, f = 0, g = b[w]; f < g; ++f) {
        var l = b[f][p]("=");
        if (l !== -1) {
            var q = b[f][I](0, l),
                l = b[f][I](l + 1),
                l = l[Ca](/\+/g, " ");
            try {
                d[q] = e(l)
            } catch (A) {}
        }
    }
    c && (a = d);
    return d
}

Он обфусцирован, но его можно понять. Он не работает, потому что некоторые переменные не определены.

Они начинают искать параметры в url с ?, а также с хэша #. Затем для каждого параметра они разделяют его знаком равенства b[f][p]("=") (который выглядит как indexOf, они используют позицию символа для получения ключа/значения). Разделив его, они проверяют, имеет ли параметр значение или нет, если имеет, то сохраняют значение d, в противном случае просто продолжают.

В итоге возвращается объект d, обрабатывающий экранирование и знак +. Этот объект точно такой же, как и мой, у него такое же поведение.


Мой метод как плагин для jQuery.

(function($) {
    $.QueryString = (function(paramsArray) {
        let params = {};

        for (let i = 0; i < paramsArray.length; ++i)
        {
            let param = paramsArray[i]
                .split('=', 2);

            if (param.length !== 2)
                continue;

            params[param[0]] = decodeURIComponent(param[1].replace(/\+/g, " "));
        }

        return params;
    })(window.location.search.substr(1).split('&'))
})(jQuery);

Использование

//Get a param
$.QueryString.param
//-or-
$.QueryString["param"]
//This outputs something like...
//"val"

//Get all params as object
$.QueryString
//This outputs something like...
//Object { param: "val", param2: "val" }

//Set a param (only in the $.QueryString object, doesn't affect the browser's querystring)
$.QueryString.param = "newvalue"
//This doesn't output anything, it just updates the $.QueryString object

//Convert object into string suitable for url a querystring (Requires jQuery)
$.param($.QueryString)
//This outputs something like...
//"param=newvalue&param2=val"

//Update the url/querystring in the browser's location bar with the $.QueryString object
history.replaceState({}, '', "?" + $.param($.QueryString));
//-or-
history.pushState({}, '', "?" + $.param($.QueryString));

Тест производительности (метод split против метода regex) (jsPerf)

Код подготовки: объявление методов

Код теста разделения

var qs = window.GetQueryString(query);

var search = qs["q"];
var value = qs["value"];
var undef = qs["undefinedstring"];

Код проверки регекса

var search = window.getParameterByName("q");
var value = window.getParameterByName("value");
var undef = window.getParameterByName("undefinedstring");

Тестирование в Firefox 4.0 x86 на Windows Server 2008 R2 / 7 x64

  • Метод разделения: 144,780 ±2.17% самый быстрый
  • Регекс метод: 13,891 ±0.85% | 90% медленнее.
Комментарии (25)

Улучшенная версия Артем Баргер'ы ответ:

function getParameterByName(name) {
    var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
    return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

Для получения более подробной информации о совершенствовании см.: http://james.padolsey.com/javascript/bujs-1-getparameterbyname/

Комментарии (6)

URLSearchParams

В Firefox 44+, оперы 36+, край 17+, сафари 10.3+ и Chrome 49+ поддержка URLSearchParams API-интерфейс:

Есть Гугл-предложил URLSearchParams полифилл для стабильной версии IE.

Это не стандартизировано консорциума W3C, но это живой стандарт WHATWG как средство.

Вы можете использовать его на "место":

let params = new URLSearchParams(location.search);

или

let params = (new URL(location)).searchParams;

Или конечно на любой URL:

let url = new URL('https://example.com?foo=1&bar=2');
let params = new URLSearchParams(url.search);

Вы можете получить параметры также с помощью стенографии `.собственность searchParams на объект url, как это:

let params = new URL('https://example.com?foo=1&bar=2').searchParams;
params.get('foo'); // "1"
params.get('bar'); // "2" 

Вы читали/набор параметров через вам(ключом),комплект(ключ, значение),добавить(ключ, значение)АПИ. Вы также можете перебрать все значения для (Пусть п параметры) {}.

А ссылка осуществлению и образец страницы доступны для аудита и тестирования.

Комментарии (5)

Просто еще одна рекомендация. Плагин Перл позволяет извлечь все части URL-адреса, включая якорь, узел, и т. д.

Он может быть использован с или без jQuery.

Использование очень просто и круто:

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value'); // jQuery version
var url = purl('http://allmarkedup.com/folder/dir/index.html?item=value'); // plain JS version
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

Однако, по состоянию на 11 ноября 2014 года, изнаночные больше не поддерживается и автор рекомендует использовать URI.js вместо этого. Этот плагин jQuery отличается тем, что она фокусируется на элементы - для использования со строками, просто использовать Ури непосредственно, с или без jQuery. Аналогичный код будет выглядеть как таковой, Фуллер документы здесь:

var url = new URI('http://allmarkedup.com/folder/dir/index.html?item=value'); // plain JS version
url.protocol(); // returns 'http'
url.path(); // returns '/folder/dir/index.html'
Комментарии (1)

многабукаф.

Быстрый, комплексное решение, который обрабатывает многозначные ключи и закодированные символы.

var qd = {};
if (location.search) location.search.substr(1).split("&").forEach(function(item) {var s = item.split("="), k = s[0], v = s[1] && decodeURIComponent(s[1]); (qd[k] = qd[k] || []).push(v)})

//using ES6   (23 characters cooler)
var qd = {};
if (location.search) location.search.substr(1).split`&`.forEach(item => {let [k,v] = item.split`=`; v = v && decodeURIComponent(v); (qd[k] = qd[k] || []).push(v)})

Мульти-подкладка:

var qd = {};
if (location.search) location.search.substr(1).split("&").forEach(function(item) {
    var s = item.split("="),
        k = s[0],
        v = s[1] && decodeURIComponent(s[1]); //  null-coalescing / short-circuit
    //(k in qd) ? qd[k].push(v) : qd[k] = [v]
    (qd[k] = qd[k] || []).push(v) // null-coalescing / short-circuit
})

Что это за код... на"значение null тогда", короткое замыкание оценки ЕС6 Деструктурируется задания, стрелочные функции, [строки] шаблон6

Пример:

"?a=1&b=0&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> qd
a: ["1", "5", "t e x t"]
b: ["0"]
c: ["3"]
d: [undefined]
e: [undefined, "http://w3schools.com/my test.asp?name=ståle&car=saab"]

> qd.a[1]    // "5"
> qd["a"][1] // "5"

<БР> <ч>

Подробнее... о ванили на JavaScript решение.

To доступ к различным частям местоположения использовать URL-адрес.(поиск|хэш)

Решение ## простой (пустышка)

var queryDict = {};
location.search.substr(1).split("&").forEach(function(item) {queryDict[item.split("=")[0]] = item.split("=")[1]})

&л;ул> <ли>ручки <б>пустые ключи</б> правильно.</ли> <ли>перекрывает <б>Multi-ключей</б> с <б>последние</б> ценностей.</ли> </ул>

"?a=1&b=0&c=3&d&e&a=5"
> queryDict
a: "5"
b: "0"
c: "3"
d: undefined
e: undefined

Многозначных ключей

Простой ключ проверки(пункт в дикт) ? дикт.пункт.толчок(вал) : дикт.элемент = [Вэл]`

var qd = {};
location.search.substr(1).split("&").forEach(function(item) {(item.split("=")[0] in qd) ? qd[item.split("=")[0]].push(item.split("=")[1]) : qd[item.split("=")[0]] = [item.split("=")[1]]})

&л;ул> <ли>возвращает <б>блоки</б> наоборот.</ли> <ли>значения доступ в <код>В КТ.ключ[индекс]</код и GT; или <код>КТ[ключа][индекс]</код></ли> </ул>

> qd
a: ["1", "5"]
b: ["0"]
c: ["3"]
d: [undefined]
e: [undefined]

Закодированных символов?

Используйте decodeURIComponent() для второго или как шпагат.

var qd = {};
location.search.substr(1).split("&").forEach(function(item) {var k = item.split("=")[0], v = decodeURIComponent(item.split("=")[1]); (k in qd) ? qd[k].push(v) : qd[k] = [v]})

Пример:

"?a=1&b=0&c=3&d&e&a=5&a=t%20e%20x%20t&e=http%3A%2F%2Fw3schools.com%2Fmy%20test.asp%3Fname%3Dståle%26car%3Dsaab"
> qd
a: ["1", "5", "t e x t"]
b: ["0"]
c: ["3"]
d: ["undefined"]  // decodeURIComponent(undefined) returns "undefined" !!!*
e: ["undefined", "http://w3schools.com/my test.asp?name=ståle&car=saab"]

<БР> <ч>

От комментариев

*!!! Обратите внимание, что decodeURIComponent(неопределено) возвращает строку в "не определено" в. Решение заключается в простом использовании &&, который обеспечивает, что decodeURIComponent() не вызывается на неопределенные значения. (См. В "готовое решение" и на самом верху.)

v = v && decodeURIComponent(v);

<БР> Если строка запроса пуста (местоположение.поиск == " и" в), в результате несколько вводит в заблуждение КТ == {" не то": не определен}. Он предложил, чтобы проверить строку запроса перед запуском парсинга likeso функции:

if (location.search) location.search.substr(1).split("&").forEach(...)
Комментарии (16)

Roshambo на snipplr.com предлагает простой скрипт для достижения этой цели, описанный в Get URL Parameters with jQuery | Improved. С помощью его скрипта вы также легко сможете вытащить только те параметры, которые вам нужны.

Вот суть:

$.urlParam = function(name, url) {
    if (!url) {
     url = window.location.href;
    }
    var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(url);
    if (!results) { 
        return undefined;
    }
    return results[1] || undefined;
}

Затем просто получите параметры из строки запроса.

Так, если URL/строка запроса была xyz.com/index.html?lang=de.

Просто вызовите var langval = $.urlParam('lang');, и все готово.

В блоге UZBEKJON есть отличная статья об этом, Получение параметров URL & значений с помощью jQuery.

Комментарии (3)

Если вы используете jQuery, вы можете использовать библиотеку, например jQuery BBQ: Back Button & Query Library.

...jQuery BBQ предоставляет полный метод .deparam(), наряду с управлением состоянием хэша, а также утилитами разбора и слияния фрагментов/строк запроса.

Редактирование: Добавление примера Deparam:

 var DeparamExample = function() {
            var params = $.deparam.querystring();

            //nameofparam is the name of a param from url
            //code below will get param if ajax refresh with hash
            if (typeof params.nameofparam == 'undefined') {
                params = jQuery.deparam.fragment(window.location.href);
            }

            if (typeof params.nameofparam != 'undefined') {
                var paramValue = params.nameofparam.toString();

            }
        };

Если вы хотите просто использовать обычный JavaScript, вы можете использовать...

var getParamValue = (function() {
    var params;
    var resetParams = function() {
            var query = window.location.search;
            var regex = /[?&;](.+?)=([^&;]+)/g;
            var match;

            params = {};

            if (query) {
                while (match = regex.exec(query)) {
                    params[match[1]] = decodeURIComponent(match[2]);
                }
            }    
        };

    window.addEventListener
    && window.addEventListener('popstate', resetParams);

    resetParams();

    return function(param) {
        return params.hasOwnProperty(param) ? params[param] : null;
    }

})();​

Из-за нового HTML History API и, в частности, history.pushState() и history.replaceState(), URL может измениться, что приведет к аннулированию кэша параметров и их значений.

Эта версия будет обновлять свой внутренний кэш параметров при каждом изменении истории.

Комментарии (0)

Просто использовать два разбивает:

function get(n) {
    var half = location.search.split(n + '=')[1];
    return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null;
}

Я читал все предыдущие и более полные ответы. Но я думаю, что это самый простой и быстрый способ. Вы можете проверить в см. Этот тест jsperf тест

Чтобы решить проблему в РУП'ы комментарий, добавить условное разбиение, изменив в первой строке в два ниже. Но абсолютной точности означает это's теперь медленнее, чем регулярное выражение (см. см. Этот тест jsperf).

function get(n) {
    var half = location.search.split('&' + n + '=')[1];
    if (!half) half = location.search.split('?' + n + '=')[1];
    return half !== undefined ? decodeURIComponent(half.split('&')[0]) : null;
}

Так что если вы знаете, что вы выиграли'т бежать в РУП'ы встречное случае, это выигрывает. В противном случае, регулярное выражение.

** если у вас есть контроль querystring и можем гарантировать, что значение, которое вы пытаетесь сделать, никогда не будет содержать каких-либо закодировано персонажи (эти значения будут плохая идея) - можно использовать следующий чуть более упрощенный и читабельный Вариант 1-й вариант:

getQueryStringValueByName функции(имя) { ВАР queryStringFromStartOfValue = местоположения.поиск.сплит(имя + '=')1; возвращение queryStringFromStartOfValue !== неопределено ? queryStringFromStartOfValue.сплит('&ампер;')[0] : значение null;

Комментарии (5)

Здесь's мой стаб на Энди Е'отличное решение с в полноценный плагин jQuery:

;(function ($) {
    $.extend({      
        getQueryString: function (name) {           
            function parseParams() {
                var params = {},
                    e,
                    a = /\+/g,  // Regex for replacing addition symbol with a space
                    r = /([^&=]+)=?([^&]*)/g,
                    d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
                    q = window.location.search.substring(1);

                while (e = r.exec(q))
                    params[d(e[1])] = d(e[2]);

                return params;
            }

            if (!this.queryStringParams)
                this.queryStringParams = parseParams(); 

            return this.queryStringParams[name];
        }
    });
})(jQuery);

Синтаксис:

var someVar = $.getQueryString('myParam');

Лучшее из обоих миров!

Комментарии (0)

Если вы'повторно делать больше манипуляций, чем просто парсинг URL-адрес в строке, вы можете найти URI.js полезная. Это библиотека для работы с URL-адреса - и поставляется с все колокола и свистки. (Извините за само рекламу здесь)

чтобы преобразовать ваш файл querystring на карте:

var data = URI('?foo=bar&bar=baz&foo=world').query(true);
data == {
  "foo": ["bar", "world"],
  "bar": "baz"
}

(URI.js также на "исправления" и плохие строки запросов, как ?&фу&&усилителя;бар=баз& к ?фу&бар=Базом)

Комментарии (2)

Мне нравится Райан Фелан'разрешение s. Но я Дон'т вижу никакого смысла расширения jQuery для этого? Нет использования функции jQuery.

С другой стороны, мне нравится встроенная функция в Гугл Хром: окна.расположение.getParameter.

Так почему бы не использовать это? Ладно, другие браузеры Дон'т иметь. Так давайте's создавать эту функцию, если она не существует:

if (!window.location.getParameter ) {
  window.location.getParameter = function(key) {
    function parseParams() {
        var params = {},
            e,
            a = /\+/g,  // Regex for replacing addition symbol with a space
            r = /([^&=]+)=?([^&]*)/g,
            d = function (s) { return decodeURIComponent(s.replace(a, " ")); },
            q = window.location.search.substring(1);

        while (e = r.exec(q))
            params[d(e[1])] = d(e[2]);

        return params;
    }

    if (!this.queryStringParams)
        this.queryStringParams = parseParams(); 

    return this.queryStringParams[key];
  };
}

Эта функция является более или менее Райан Фелан, но его заворачивают по-разному: четкое название и никакой зависимости от других библиотек JavaScript. Подробнее об этой функции на моем блоге.

Комментарии (1)

Вот быстрый способ, чтобы получить объект, похожий на РНР параметр$_GET массив:

function get_query(){
    var url = location.search;
    var qs = url.substring(url.indexOf('?') + 1).split('&');
    for(var i = 0, result = {}; i < qs.length; i++){
        qs[i] = qs[i].split('=');
        result[qs[i][0]] = decodeURIComponent(qs[i][1]);
    }
    return result;
}

Использование:

var $_GET = get_query();

В строке запроса х=5&г&з=привет&х=6 возвращает объект:

{
  x: "6",
  y: undefined,
  z: "hello"
}
Комментарии (4)

Держите его просто в обычный JavaScript-код:

function qs(key) {
    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[key];
}

Вызывать ее из любого места в коде JavaScript:

var result = qs('someKey');
Комментарии (2)

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

Это простой способ библиотека, которая делает рассечение и обработки параметров URL. Статический метод имеет следующие суб методы, которые можно назвать по теме URL-адрес:

  • getHost
  • getPath
  • getHash
  • setHash
  • метод getparams
  • метода getquery
  • setParam
  • значения
  • hasParam
  • removeParam

Пример:

URLParser(url).getParam('myparam1')

var url = "http://www.test.com/folder/mypage.html?myparam1=1&myparam2=2#something";

function URLParser(u){
    var path="",query="",hash="",params;
    if(u.indexOf("#") > 0){
        hash = u.substr(u.indexOf("#") + 1);
        u = u.substr(0 , u.indexOf("#"));
    }
    if(u.indexOf("?") > 0){
        path = u.substr(0 , u.indexOf("?"));
        query = u.substr(u.indexOf("?") + 1);
        params= query.split('&');
    }else
        path = u;
    return {
        getHost: function(){
            var hostexp = /\/\/([\w.-]*)/;
            var match = hostexp.exec(path);
            if (match != null && match.length > 1)
                return match[1];
            return "";
        },
        getPath: function(){
            var pathexp = /\/\/[\w.-]*(?:\/([^?]*))/;
            var match = pathexp.exec(path);
            if (match != null && match.length > 1)
                return match[1];
            return "";
        },
        getHash: function(){
            return hash;
        },
        getParams: function(){
            return params
        },
        getQuery: function(){
            return query;
        },
        setHash: function(value){
            if(query.length > 0)
                query = "?" + query;
            if(value.length > 0)
                query = query + "#" + value;
            return path + query;
        },
        setParam: function(name, value){
            if(!params){
                params= new Array();
            }
            params.push(name + '=' + value);
            for (var i = 0; i < params.length; i++) {
                if(query.length > 0)
                    query += "&";
                query += params[i];
            }
            if(query.length > 0)
                query = "?" + query;
            if(hash.length > 0)
                query = query + "#" + hash;
            return path + query;
        },
        getParam: function(name){
            if(params){
                for (var i = 0; i < params.length; i++) {
                    var pair = params[i].split('=');
                    if (decodeURIComponent(pair[0]) == name)
                        return decodeURIComponent(pair[1]);
                }
            }
            console.log('Query variable %s not found', name);
        },
        hasParam: function(name){
            if(params){
                for (var i = 0; i < params.length; i++) {
                    var pair = params[i].split('=');
                    if (decodeURIComponent(pair[0]) == name)
                        return true;
                }
            }
            console.log('Query variable %s not found', name);
        },
        removeParam: function(name){
            query = "";
            if(params){
                var newparams = new Array();
                for (var i = 0;i < params.length;i++) {
                    var pair = params[i].split('=');
                    if (decodeURIComponent(pair[0]) != name)
                          newparams .push(params[i]);
                }
                params = newparams;
                for (var i = 0; i < params.length; i++) {
                    if(query.length > 0)
                        query += "&";
                    query += params[i];
                }
            }
            if(query.length > 0)
                query = "?" + query;
            if(hash.length > 0)
                query = query + "#" + hash;
            return path + query;
        },
    }
}

document.write("Host: " + URLParser(url).getHost() + '<br>');
document.write("Path: " + URLParser(url).getPath() + '<br>');
document.write("Query: " + URLParser(url).getQuery() + '<br>');
document.write("Hash: " + URLParser(url).getHash() + '<br>');
document.write("Params Array: " + URLParser(url).getParams() + '<br>');
document.write("Param: " + URLParser(url).getParam('myparam1') + '<br>');
document.write("Has Param: " + URLParser(url).hasParam('myparam1') + '<br>');

document.write(url + '<br>');

// Remove the first parameter
url = URLParser(url).removeParam('myparam1');
document.write(url + ' - Remove the first parameter<br>');

// Add a third parameter
url = URLParser(url).setParam('myparam3',3);
document.write(url + ' - Add a third parameter<br>');

// Remove the second parameter
url = URLParser(url).removeParam('myparam2');
document.write(url + ' - Remove the second parameter<br>');

// Add a hash
url = URLParser(url).setHash('newhash');
document.write(url + ' - Set Hash<br>');

// Remove the last parameter
url = URLParser(url).removeParam('myparam3');
document.write(url + ' - Remove the last parameter<br>');

// Remove a parameter that doesn't exist
url = URLParser(url).removeParam('myparam3');
document.write(url + ' - Remove a parameter that doesn\"t exist<br>');
Комментарии (0)

Из MDN](https://developer.mozilla.org/en-US/docs/Web/API/URLUtils/search#Get_the_value_of_a_single_search_param):

function loadPageVar (sVar) {
  return unescape(window.location.search.replace(new RegExp("^(?:.*[&\\?]" + escape(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}

alert(loadPageVar("name"));
Комментарии (0)

Я использую много регулярных выражений, но не для этого.

Кажется, что проще и эффективнее для меня, чтобы прочитать строку запроса, как только в моем приложении, и строить объект из всех пар ключ/значение:

var search = function() {
  var s = window.location.search.substr(1),
    p = s.split(/\&/), l = p.length, kv, r = {};
  if (l === 0) {return false;}
  while (l--) {
    kv = p[l].split(/\=/);
    r[kv[0]] = decodeURIComponent(kv[1] || '') || true;
  }
  return r;
}();

Для URL-адреса, такие как http://domain.com?param1=val1&параметр param2=val2 вы можете получить их значения в коде, как поиск.параметр1 " и " поиск.параметр param2`.

Комментарии (0)

Гольф код:

var a = location.search&&location.search.substr(1).replace(/\+/gi," ").split("&");
for (var i in a) {
    var s = a[i].split("=");
    a[i]  = a[unescape(s[0])] = unescape(s[1]);
}

Отобразить его!

for (i in a) {
    document.write(i + ":" + a[i] + "<br/>"); 
};

На моем Mac: тест.НТМ?я=могу&и=отображает cheezburger

0:can
1:cheezburger
i:can
has:cheezburger
Комментарии (2)

Способ Рошамбо в jQuery было'принимают t уход декодировать URL-адрес

Просто добавил, что возможность также добавив в оператор return

return decodeURIComponent(results[1].replace(/\+/g, " ")) || 0;

Теперь вы можете найти обновленные суть:

$.urlParam = function(name){
var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
if (!results) { return 0; }
return decodeURIComponent(results[1].replace(/\+/g, " ")) || 0;
}
Комментарии (0)