Построение URL с параметрами с помощью jQuery

У меня есть, например, следующий URL-адрес, хранящийся в глобальной переменной:

var myUrl = "http://mydomain.com/something?row=1";

Тогда функция должна добавить, скажем, еще один параметр, называемый "столбец". Как эта функция добавит параметры в ранее существовавшую строку URL, используя jQuery?

Пример ожидаемой сгенерированной строки:

"http://mydomain.com/something?row=1&column=9"

Проблема заключается в том, что myUrl также может быть просто:

var myUrl = "http://mydomain.com/something";

(Обратите внимание, что ранее не существовали параметры)

Ответ 1

Проверьте функцию jQuery.param(), которая должна сделать трюк.

http://api.jquery.com/jQuery.param/

Затем вы можете просто создать функцию, которая добавляет строку, сгенерированную с помощью .param(), к URL-адресу.

Ответ 2

var myUrl = "http://mydomain.com/something";

function addQSParm(name, value) {
    var re = new RegExp("([?&]" + name + "=)[^&]+", "");

    function add(sep) {
        myUrl += sep + name + "=" + encodeURIComponent(value);
    }

    function change() {
        myUrl = myUrl.replace(re, "$1" + encodeURIComponent(value));
    }
    if (myUrl.indexOf("?") === -1) {
        add("?");
    } else {
        if (re.test(myUrl)) {
            change();
        } else {
            add("&");
        }
    }
}

console.log(myUrl);

addQSParm("foo", "asdf");
console.log(myUrl);

addQSParm("bar", "qwerty");
console.log(myUrl);

addQSParm("foo", "123");
console.log(myUrl);

jsFiddle

Ответ 3

Вам не нужен jQuery, используйте такую ​​функцию:

var buildUrl = function(base, key, value) {
    var sep = (base.indexOf('?') > -1) ? '&' : '?';
    return base + sep + key + '=' + value;
}

Вы бы использовали его следующим образом:

buildUrl('http://www.example.com/foo', 'test', '123');
buildUrl('http://www.example.com/foo?bar=baz', 'test', '123');

Ответ 4

Храните все в объекте, пока вам не понадобится строка.

Сначала введите объект из нескольких начальных значений:

var $_GET = location.search.substr(1).split("&").reduce( function( obj, val ){
    if( !val ) return obj;
    var pair = val.split("=");
    obj[pair[0]] = pair[1];
    return obj;
}, {} );

Учитывая начальный url: "http://mydomain.com/something?row=1&column=9"

$_GET['column'] = 5;

$.param( $_GET ); //"row=1&column=5"

Array # уменьшить

Ответ 5

Вы можете попробовать это.

myUrl += ((myUrl.indexOf('?') == -1) ? '?' : '&');
myUrl += "column=9";

Ответ 6

if (myUrl.indexOf("?") != -1){
    // contains query string
}
else
{
    // doesn't
}