使用jQuery构造带有参数的URL

Constructing a URL with parameters using jQuery

本文关键字:参数 URL jQuery 使用      更新时间:2023-09-26

例如,我在全局变量中存储了以下URL:

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

然后,一个函数必须添加另一个名为""的参数。该函数如何使用jQuery将参数添加到预先存在的URL字符串中?

预期生成的字符串示例:

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

问题是myUrl也可能只是:

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

(请注意,没有预先存在的参数)

看看jQuery函数.param(),它应该能完成任务。

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

然后,您可以创建一个函数,将.praram()生成的字符串附加到url中。

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

您不需要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');

将所有内容都保存在一个对象中,直到您真正需要一个字符串为止。

首先从一些初始值填充对象:

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"

数组#减少

你可以试试这个。

myUrl += ((myUrl.indexOf('?') == -1) ? '?' : '&');
myUrl += "column=9";
if (myUrl.indexOf("?") != -1){
    // contains query string
}
else
{
    // doesn't
}