使用jQuery构build一个带有参数的URL

我有例如下面的URL存储在一个全局variables:

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

然后一个函数必须添加一个叫“ ”的参数。 该函数将如何使用jQuery将参数添加到预先存在的URLstring?

预期生成的string示例:

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

问题是myUrl也可能只是:

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

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

检查出jQuery函数.param(),这应该做的伎俩。

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

然后你可以创build一个函数,把由.param()生成的string附加到一个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" 

arrays#减less

你可以试试这个

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