Today I encountered a need to use JavaScript to replace some parameters in the URL. I remembered that I found a parseUrl function from the Internet not long ago, which can be implemented. The code is organized as follows:
//分析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('/')
};
}
//替换myUrl中的同名参数值
function replaceUrlParams(myUrl, newParams) {
/*
for (var x in myUrl.params) {
for (var y in newParams) {
if (x.toLowerCase() == y.toLowerCase()) {
myUrl.params[x] = newParams[y];
}
}
}
*/
for (var x in newParams) {
var hasInMyUrlParams = false;
for (var y in myUrl.params) {
if (x.toLowerCase() == y.toLowerCase()) {
myUrl.params[y] = newParams[x];
hasInMyUrlParams = true;
break;
}
}
//原来没有的参数则追加
if (!hasInMyUrlParams) {
myUrl.params[x] = newParams[x];
}
}
var _result = myUrl.protocol "://" myUrl.host ":" myUrl.port myUrl.path "?";
for (var p in myUrl.params) {
_result = (p "=" myUrl.params[p] "&");
}
if (_result.substr(_result.length - 1) == "&") {
_result = _result.substr(0, _result.length - 1);
}
if (myUrl.hash != "") {
_result = "#" myUrl.hash;
}
return _result;
}
//辅助输出
function w(str) {
document.write(str "
");
}
var myURL = parseURL('http://abc.com:8080/dir/index.html?id=255&m=hello#top');
w("myUrl.file = " myURL.file) // = 'index.html'
w("myUrl.hash = " myURL.hash) // = 'top'
w("myUrl.host = " myURL.host) // = 'abc.com'
w("myUrl.query = " myURL.query) // = '?id=255&m=hello'
w("myUrl.params = " myURL.params) // = Object = { id: 255, m: hello }
w("myUrl.path = " myURL.path) // = '/dir/index.html'
w("myUrl.segments = " myURL.segments) // = Array = ['dir', 'index.html']
w("myUrl.port = " myURL.port) // = '8080'
w("myUrl.protocol = " myURL.protocol) // = 'http'
w("myUrl.source = " myURL.source) // = 'http://abc.com:8080/dir/index.html?id=255&m=hello#top'
var _newUrl = replaceUrlParams(myURL, { id: 101, m: "World", page: 1,"page":2 });
w("
新url为:")
w(_newUrl); //http://abc.com:8080/dir/index.html?id=101&m=World&page=2#top
Statement:The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn