使用jQuery构造带参数的URL

Alf*_*rio 55 javascript jquery

我有一个存储在全局变量中的以下URL:

var myUrl = "http://mydomain.com/something?row=1";
Run Code Online (Sandbox Code Playgroud)

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

预期生成的字符串的示例:

"http://mydomain.com/something?row=1&column=9"
Run Code Online (Sandbox Code Playgroud)

问题是,myUrl这也可能只是:

var myUrl = "http://mydomain.com/something";
Run Code Online (Sandbox Code Playgroud)

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

Jes*_*lak 53

查看jQuery函数.param(),这应该可以解决问题.

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

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

  • 如果字符串已经有参数怎么办?或者字符串已经具有相同名称的参数? (15认同)
  • 在这种情况下,最好的事情可能是预先解析URL,然后使用jQuery.param或类似方法重建它."字符串是一个鲜明的数据结构......" (2认同)

epa*_*llo 23

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);
Run Code Online (Sandbox Code Playgroud)

的jsfiddle


And*_*are 21

你不需要jQuery,使用这样的函数:

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

你会像这样使用它:

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

  • 这是缺少URL编码. (5认同)