jsuri 让你方便的处理url
https://github.com/derek-watson/jsUri
Pass anything that your browser would recognize as a url to the new Uri() constructor
var uri =newUri('http://user:pass@www.test.com:81/index.html?q=books#fragment');
and then use the following accessor methods to get at the various parts.
uri.protocol(); // http
uri.userInfo(); // user:pass
uri.host(); // www.test.com
uri.port(); // 81
uri.path(); // /index.html
uri.query(); // q=books
uri.anchor(); // fragment
The accessor methods accept an optional value for setting the property
uri.protocol('https');
uri.toString(); // https://user:pass@www.test.com:81/index.html?q=books#fragment
uri.host('mydomain.com');
uri.toString(); // https://user:pass@www.mydomain.com:81/index.html?q=books#fragment
Fluent Manipulation
The fluent interface provides a simple way to chain property assignment
newUri()
.setPath('/index.html')
.setAnchor('content')
.setHost('www.test.com')
.setPort(8080)
.setUserInfo('username:password')
.setProtocol('https')
.setQuery('this=that&some=thing') // https://username:password@www.test.com:8080/index.html?this=that&some=thing#content
newUri('http://www.test.com')
.setHost('www.yahoo.com')
.setProtocol('https') // https://www.yahoo.com
newUri()
.setPath('/archives/1979/')
.setQuery('?page=1') // /archives/1979?page=1
Query Parameter Access and Manipulation
Special methods are available for fetching, building and modifying query string parameters. An emhpasis is placed on query string integrity; duplicate parameter names and values are preserved. Parameter ordering is preserved when possible. URI Components are decoded for comparision, but are otherwise left in their original state.
Getting query param values by name
Returns the first query param value for the key
newUri('?cat=1&cat=2&cat=3').getQueryParamValue('cat') // 1
Returns all query param values the key
newUri('?cat=1&cat=2&cat=3').getQueryParamValues('cat') // [1, 2, 3]
Adding query param values
newUri().addQueryParam('q','books') // ?q=books
newUri('http://www.github.com')
.addQueryParam('testing','123')
.addQueryParam('one',1) // http://www.github.com/?testing=123&one=1
// insert param at index 0
newUri('?b=2&c=3&d=4').addQueryParam('a','1',0) // ?a=1&b=2&c=3&d=4
Replacing query param values
Replaces every query string parameter named key with a single instance with the value newVal. If oldValue is supplied, only parameters valuedoldVal will be replaced.
newUri('?a=1&b=2&c=3')
.replaceQueryParam('a','eh') // ?a=eh&b=2&c=3
newUri('?a=1&b=2&c=3&c=4&c=5&c=6')
.replaceQueryParam('c','five','5') // ?a=1&b=2&c=3&c=4&c=five&c=6
newUri().replaceQueryParam('page',2) // ?page=2
Deleting query param values
Removes instances of query parameters named key. If value is passed, only params named key and valued value will be deleted.
newUri('?a=1&b=2&c=3')
.deleteQueryParam('a') // ?b=2&c=3
newUri('test.com?a=1&b=2&c=3&a=eh')
.deleteQueryParam('a','eh') // test.com/?a=1&b=2&c=3
Object Cloning
Duplication (via .clone()) is an easy way to inflate an identical uri object, which you can muck around with as much as you like without destroying the original.
var baseUri =newUri('http://localhost/');
baseUri.clone().setProtocol('https'); // https://localhost/
baseUri; // http://localhost/