Блог для вебмастеров и разработчиков
13 апреля 2016, 11:19

JavaScript: как получить get параметр

Как получить get параметры

В javascript нет встроенных функций, которые позволяют получить значение определенного get параметра. Но мы можем написать свою функцию которая будет искать и возвращать значение нужного нам get параметра.

Функция для получения get:

Функция работает аналогично функции $_GET в PHP. Распознает массивы в гет параметрах.

function $_GET(keys) {
    function getElement(arr, keys) {
        let key = keys.shift();
        return keys.length ? getElement(arr[key], keys) : arr[key];
    }

    function setElement(arr, keys, value) {
        let key = keys.shift();
        if (keys.length) {
            arr[key] = {};
            setElement(arr[key], keys, value)
        } else {    
            if (!key) {
                key = 0;
                while (key in arr) {
                    key++;
                }
            }
            arr[key] = value;
        }
    }

    let get = {};
    window.location.search.slice(1).split('&').forEach(function(item) {
        let data = item.split('=');
        let key = data[0].replace(/\[.*/, '');
        let value = data[1] ? data[1] : '';
        if (data[0] !== key) {
            let subkeys = data[0].match(/(?<=\[).*?(?=\])/g);
            get[key] = get[key] ? get[key] : {};
            setElement(get[key], subkeys, value);
        } else {
            get[key] = value;
        }
    });

    if (keys) {
        return getElement(get, keys.constructor !== Array ? keys.split() : keys);
    }

    return get;
}

Получение всеx get параметров в виде объекта: $_GET()
Получение значения get параметра: $_GET('param')
Получение значения get параметра массива, нужно указать вложенность в виде массива: $_GET(['param', 'key'])

Простая функция для получения get:

Данная функция позволяет получить значение определенного get параметра точно по ключу, массивы не распознает.

function $_GET(key) {
    var p = window.location.search;
    p = p.match(new RegExp(key + '=([^&=]+)'));
    return p ? p[1] : false;
}

Например, ваш url из которого нужно получить get выглядит так: http://frontblog.ru/index.php?page=1

Для того чтобы получить значение параметра page вставляете в свой скрипт $_GET('page') и данная функция вернет вам 1, что является значение параметра page.

Если параметра page не окажется на странице, то функция $_GET('page') вернет false.

Функция для получения всех get параметров в виде массива:

Рассмотренная выше функция позволяет получить определенный параметр по ключу, но можно получить все параметры сразу и записать их в переменную и далее использовать их как душе угодно, массивы эта функция не распознает. Пример такой функции:

var gets = (function() {
    var a = window.location.search;
    var b = new Object();
    a = a.substring(1).split("&");
    for (var i = 0; i < a.length; i++) {
  	c = a[i].split("=");
        b[c[0]] = c[1];
    }
    return b;
})();

Данная функция получает все get параметры и записывает их в переменную gets. Для получения параметра page нужно написать так gets['page']. Плюс такого способа только в том, что функция выполнится один раз и у вас будут все параметры в виде ассоциативного массива.

Например, для url http://frontblog.ru/index.php?page=1&item=2 массив будет выглядеть так:

var gets = {
    "page" : "1",
    "item" : "2"
}

Ключами являются page и item. По ним и происходит поиск нужного значения: gets['page'] вернет 1, gets['item'] вернет 2.

Какой функцией воспользоваться решать вам. Также буду рад предложениям подобных функций в комментариях.
Комментарии ()
  1. Валерий Валерий 14 декабря 2017, 15:01 #
    Спасибо за замечательные функции!
    Сильно помогло!
    1. денчик денчик 26 апреля 2018, 20:10 #
      спасибо )) прям то что надо )
      1. Сергей Сергей 15 мая 2018, 08:58 #
        Добрый день. Не могли бы Вы описать функции для добавления и удаления параметров в url строку
        1. AlexRas AlexRas 22 мая 2018, 20:56 #
          Добрый. Вам нужно смотреть в сторону History API, позже напишу функцию отдельной статьей.
          1. Павел Павел 04 августа 2021, 23:58 #
            window.location+='&name=value'?
          2. Юрий Юрий 13 апреля 2019, 09:01 #
            Здорово, но морально устарело… юзаю свой собственный движок, там настроен мод реврайт и получается, что у меня все страницы типа /page/123 что в переводе на обычный — /?mod=page&id=123 и соответственно функция не работает =(( есть ли возможность как то ее переделать под этот формат? А то приходится в странице делать скрытое поле с ид страницы и уже из него ява-скрипт берет ид страницы что не очень удобно, так как надо не забывать ставить это скрытое поле
            1. AlexRas AlexRas 25 апреля 2019, 20:04 #
              Вставляйте не поле, а делайте ассоциативный массив и туда добавляйте нужные значения. Или урл можно регулярным выражением разобрать.
            2. Владимир Владимир 27 апреля 2019, 11:06(Комментарий был изменён) #
              Малость примитивный ГЕТ, если массив в строке адресной, то функция не поймёт и не выдаст его как массив и плохо параметры в длиином УРЛ выбирает. Но для маломальской работы сгодится. А так хорошо.
              1. Eltigre Eltigre 02 марта 2023, 23:11 #
                Первый вариант для получения конкретного параметра, куда записывается значения* не пойму)
                1. AlexRas AlexRas 02 апреля 2023, 10:50 #
                  Это функция, которая возвращает значение. она никуда его не записывает. Вот так нужно сделать, чтобы записать: var param = $_GET('param');
                Добавить комментарий