我想知道如何在现有网址中添加新参数.问题是:网址还可能包含锚点.
例如:
http://www.example.com?foo=bar#hashme
Run Code Online (Sandbox Code Playgroud)
我想为它添加另一个参数,因此它会导致:
http://www.example.com?foo=bar&x=y#hashme
Run Code Online (Sandbox Code Playgroud)
ske*_*rit 23
我使用了The Awesome One解决方案的部分内容,以及在这个问题上找到的解决方案:
将它们组合到此脚本中:
function addParameter(url, parameterName, parameterValue, atStart/*Add param before others*/){
replaceDuplicates = true;
if(url.indexOf('#') > 0){
var cl = url.indexOf('#');
urlhash = url.substring(url.indexOf('#'),url.length);
} else {
urlhash = '';
cl = url.length;
}
sourceUrl = url.substring(0,cl);
var urlParts = sourceUrl.split("?");
var newQueryString = "";
if (urlParts.length > 1)
{
var parameters = urlParts[1].split("&");
for (var i=0; (i < parameters.length); i++)
{
var parameterParts = parameters[i].split("=");
if (!(replaceDuplicates && parameterParts[0] == parameterName))
{
if (newQueryString == "")
newQueryString = "?";
else
newQueryString += "&";
newQueryString += parameterParts[0] + "=" + (parameterParts[1]?parameterParts[1]:'');
}
}
}
if (newQueryString == "")
newQueryString = "?";
if(atStart){
newQueryString = '?'+ parameterName + "=" + parameterValue + (newQueryString.length>1?'&'+newQueryString.substring(1):'');
} else {
if (newQueryString !== "" && newQueryString != '?')
newQueryString += "&";
newQueryString += parameterName + "=" + (parameterValue?parameterValue:'');
}
return urlParts[0] + newQueryString + urlhash;
};
Run Code Online (Sandbox Code Playgroud)
例: addParameter('http://www.example.com?foo=bar#hashme', 'bla', 'valuebla', false)
结果是 http://www.example.com?foo=bar&bla=valuebla#hashme
fre*_*dev 10
这可以是另一个很好的解决方案,如果参数已经存在,该版本甚至可以替换参数,添加参数不带值:
function addParam(url, param, value) {
var a = document.createElement('a'), regex = /(?:\?|&|&)+([^=]+)(?:=([^&]*))*/g;
var match, str = []; a.href = url; param = encodeURIComponent(param);
while (match = regex.exec(a.search))
if (param != match[1]) str.push(match[1]+(match[2]?"="+match[2]:""));
str.push(param+(value?"="+ encodeURIComponent(value):""));
a.search = str.join("&");
return a.href;
}
url = "http://www.example.com#hashme";
newurl = addParam(url, "ciao", "1");
alert(newurl);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
57740 次 |
| 最近记录: |