Как проверить, есть ли строка / параметр в URL и если нет, добавить его - PullRequest
0 голосов
/ 27 марта 2012

У меня есть jQuery, который получает параметры из опций выбора формы и добавляет его в URL для поиска. Но на данный момент мой JS удаляет старые вещи и всегда заменяет новые. Вот текущий:

$("#year").change(function() {
        var path = $(location).attr('href').split('?', 1);;
        var year = $(this).val();
        var search = path + '?year=' + year;

        if ($(this).val() != '') {
            window.open(search, '_self');
        }
    });

    $("#type").change(function() {
        var path = $(location).attr('href').split('?', 1);;
        var type = $(this).val();
        var search = path + '?type=' + type;

        if ($(this).val()) {
            window.open(search, '_self');
        }
    });

Так что, если пользователь выбирает из другого варианта, будет: www.domain.com/search?type=something или www.domain.com/search?year=2011

Но я бы хотел, чтобы пользователь мог выбрать оба параметра. Поэтому URL-адрес может быть www.domain.com/search?type=something&year=2011, но я не уверен, как это сделать.

Я пытался что-то, но потом он всегда добавлял новые параметры в конец, и URL заканчивался примерно так: www.domain.com/search?type=something&year=2011&type=something&year=2011&type=something&year=2011

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 27 марта 2012

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

Итак, вот js-код для основной идеи (http://jsfiddle.net/RtCte/):

function replaceOrAdd(str, pattern, newValue) {
   if (str.match(pattern)) {
    // parameter is already defined
    document.writeln(str.replace(pattern, newValue) + '<br />');
   }
   else if (str.indexOf("?") != -1) {
    // query string exists, but without this parameter
    document.writeln(str + "&" + newValue + '<br />');
   }
   else {
    // there is no query string
    document.writeln(str + "?" + newValue + '<br />');
   }
}

var str = ["www.domain.com/search?type=something&year=2011",
"www.domain.com/search?year=2011&type=something",
"www.domain.com/search?type=something",
"www.domain.com/search?year=2011",
"www.domain.com/search"];

var patt1 = /type=[^&^$]+/i;
var patt2 = /year=[^&^$]+/i;

var newValue1 = "type=new"
var newValue2 = "year=1999"

for (var i = 0; i < str.length; i++) {
   replaceOrAdd(str[i], patt1, newValue1);
}
document.write("<br/>");
for (var i = 0; i < str.length; i++) {
   replaceOrAdd(str[i], patt2, newValue2);
}
0 голосов
/ 27 марта 2012

Вы можете проанализировать все текущие строки запросов для объекта / массива, а затем обновить или добавить этот объект и, наконец, построить новую строку запросов из этого объекта. Это гарантирует, что всегда есть один из них и что они правильно установлены.

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