使用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 }