用javascript替换URL中的参数值的技巧
今天遇到一个需要用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