Добавление / изменение строки запроса / GET переменных в URL с помощью JavaScript - PullRequest
5 голосов
/ 04 октября 2011

Итак, я хочу заменить значения переменных GET в URL-адресе, а если переменная не существует, добавить ее в URL-адрес.

РЕДАКТИРОВАТЬ: я делаю это для элементов, не текущих страницlocation ..

Я не очень хорошо разбираюсь в javascript, но я знаю, как довольно хорошо использовать jQuery и основы javascript.Я действительно знаю, как писать регулярные выражения, но не знаю, как использовать синтаксис javascript для регулярных выражений и какие функции использовать для него.

Вот что у меня есть, и в строке 3 есть ошибка:на jsfiddle (или ниже): http://jsfiddle.net/MadLittleMods/C93mD/

function addParameter(url, param, value) {
    var pattern = new RegExp(param + '=(.*?);', 'gi');
    return url.replace(pattern, param + '=' + value + ';');

    alert(url);
}

Ответы [ 4 ]

15 голосов
/ 04 октября 2011

Нет необходимости использовать jQuery на этом. Регулярных выражений и строковых функций достаточно. Смотрите мой комментарий ниже:

function addParameter(url, param, value) {
    // Using a positive lookahead (?=\=) to find the
    // given parameter, preceded by a ? or &, and followed
    // by a = with a value after than (using a non-greedy selector)
    // and then followed by a & or the end of the string
    var val = new RegExp('(\\?|\\&)' + param + '=.*?(?=(&|$))'),
        parts = url.toString().split('#'),
        url = parts[0],
        hash = parts[1]
        qstring = /\?.+$/,
        newURL = url;

    // Check if the parameter exists
    if (val.test(url))
    {
        // if it does, replace it, using the captured group
        // to determine & or ? at the beginning
        newURL = url.replace(val, '$1' + param + '=' + value);
    }
    else if (qstring.test(url))
    {
        // otherwise, if there is a query string at all
        // add the param to the end of it
        newURL = url + '&' + param + '=' + value;
    }
    else
    {
        // if there's no query string, add one
        newURL = url + '?' + param + '=' + value;
    }

    if (hash)
    {
        newURL += '#' + hash;
    }

    return newURL;
}

А вот и Скрипка

Обновление:

Код теперь обрабатывает случай, когда в URL есть хэш.

Редактировать

пропустил дело! Теперь код проверяет, есть ли строка запроса вообще .

1 голос
/ 03 июля 2013

Я бы пошел с этой небольшой, но полной библиотекой для обработки URL в js:

https://github.com/Mikhus/jsurl

0 голосов
/ 21 июля 2013
<script type="text/javascript">
    $(document).ready(function () {
        $('input.letter').click(function () {
            //0- prepare values
            var qsTargeted = 'letter=' + this.value; //"letter=A";
            var windowUrl = '';
            var qskey = qsTargeted.split('=')[0];
            var qsvalue = qsTargeted.split('=')[1];
            //1- get row url
            var originalURL = window.location.href;
            //2- get query string part, and url
            if (originalURL.split('?').length > 1) //qs is exists
            {
                windowUrl = originalURL.split('?')[0];
                var qs = originalURL.split('?')[1];
                //3- get list of query strings
                var qsArray = qs.split('&');
                var flag = false;
                //4- try to find query string key
                for (var i = 0; i < qsArray.length; i++) {
                    if (qsArray[i].split('=').length > 0) {
                        if (qskey == qsArray[i].split('=')[0]) {
                            //exists key
                            qsArray[i] = qskey + '=' + qsvalue;
                            flag = true;
                            break;
                        }
                    }
                }
                if (!flag)//   //5- if exists modify,else add
                {
                    qsArray.push(qsTargeted);
                }
                var finalQs = qsArray.join('&');
                //6- prepare final url
                window.location = windowUrl + '?' + finalQs;
            }
            else {
                //6- prepare final url
                //add query string
                window.location = originalURL + '?' + qsTargeted;
            }
        })
    });
</script>
0 голосов
/ 04 октября 2011

См. Изменить параметры URL . Он отвечает на ваш вопрос в более общем виде (изменяя любой параметр URL). В разделе ответов есть решения как для jQuery, так и для обычных js.

Похоже, что url.replace должно быть location.replace, но я могу ошибаться (это утверждение основано на быстром поиске в Google по URL 'url.replace javascript).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...