今天遇到一个需要用javascript将url中的某些参数替换的需求:
function parseURL(url) {
|
var a = document.createElement( 'a' );
|
a.href = url; |
return {
|
source: url, |
protocol: a.protocol.replace( ':' , '' ),
|
host: a.hostname, |
port: a.port, |
query: a.search, |
params: ( function (){
|
var ret = {},
|
seg = a.search.replace(/^\?/, '' ).split( '&' ),
|
len = seg.length, i = 0, s; |
for (;i<len;i++) {
|
if (!seg[i]) { continue ; }
|
s = seg[i].split( '=' );
|
ret[s[0]] = s[1]; |
} |
return ret;
|
})(), |
file: (a.pathname.match(/\/([^\/? #]+)$/i) || [,''])[1],
|
hash: a.hash.replace( '#' , '' ),
|
path: a.pathname.replace(/^([^\/])/, '/$1' ),
|
relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, '' ])[1],
|
segments: a.pathname.replace(/^\ //,'').split('/')
|
}; |
} |
用法:
var myURL = parseURL( 'http://docs.jayzou.com/?default.aspx?id=255&m=hello#top' );
|
myURL.file; // = 'index.html'
|
myURL.hash; // = 'top'
|
myURL.host; // = 'abc.com'
|
myURL.query; // = '?id=255&m=hello'
|
myURL.params; // = Object = { id: 255, m: hello }
|
myURL.path; // = '/dir/index.html'
|
myURL.segments; // = Array = ['dir', 'index.html']
|
myURL.port; // = '8080'
|
myURL.protocol; // = 'http'
|
myURL.source; // = 'http://www.jayzou.com |
取得URL的参数,以对象形式返回!
var getParam = function (path){
|
var result = {},param = /([^?=&]+)=([^&]+)/ig,match;
|
while ((match = param.exec(path)) != null ){
|
result[match[1]] = match[2]; |
} |
return result;
|
} |
? |
Object.keys = Object.keys || function (obj){
|
var result = [];
|
for ( var i in obj){
|
if (obj.hasOwnProperty(i)){
|
result.push(i) |
} |
} |
return result;
|
} |
var path = "http://www.jayzou.com/f?ct=318767104&tn=baiduKeywordSearch&sc=1&pn=0&rn=50&lm=4&rs4=2&rs3=2&word=%D0%C2%BE%D3%D5%D1%C4%CB&frs=jpq" ;
|
? |
var r = getParam(path);
|
alert(Object.keys(r)) //ct,tn,sc,pn,rn,lm,rs4,rs3,word,frs |