以下函数旨在替换URL中的变量。
它有效,但我想这样做,如果你传入一个URL中不存在的变量,它会将它添加到URL。
window.setUrlParameter = function(param, value) {
const regExp = new RegExp(param + "(.+?)(&|$)", "g");
const newUrl = window.location.href.replace(regExp, param + "=" + value + "$2");
window.history.pushState("", "", newUrl);
}
有功能。它需要您要替换的参数名称以及您要设置的值。
正如我之前所说,我希望它不仅能够替换变量,还能够设置它们。
谢谢!
答案 0 :(得分:0)
你有正则表达式,你可以只测试同一个网址的网址,如果不存在则添加它
@NgModule({
imports: [ DashboardRoutingModule, CommonModule, SharedModule.forRoot()],
declarations: [ DashboardComponent, ValuesPipe],
exports: [ValuesPipe]
})
export class DashboardModule {
}
答案 1 :(得分:0)
此函数也应该比使用从this answer修改的正则表达式更快。</ p>
(箭头功能只是ES6语法,你也可以使用普通功能)
window.setUrlParameter = (param, value) => {
var url = window.location.href;
var hash = location.hash;
url = url.replace(hash, '');
if (url.indexOf(param + "=") >= 0)
{
var prefix = url.substring(0, url.indexOf(param));
var suffix = url.substring(url.indexOf(param));
suffix = suffix.substring(suffix.indexOf("=") + 1);
suffix = (suffix.indexOf("&") >= 0) ? suffix.substring(suffix.indexOf("&")) : "";
url = prefix + param + "=" + value + suffix;
}
else
{
if (url.indexOf("?") < 0)
url += "?" + param + "=" + value;
else
url += "&" + param + "=" + value;
}
window.history.pushState(null, null, url + hash);
}
答案 2 :(得分:0)
我强烈建议使用RegEx清除它,但您可以检查href是否包含参数
window.setUrlParameter = function(param, value) {
const regExp = new RegExp(param + "(.+?)(&|$)", "g");
let newUrl = window.location.href.replace(regExp, param + "=" + value + "$2");
if (! window.location.href.includes(param) )
newUrl+='&'+param+'='+value
window.history.pushState("", "", newUrl);
}
答案 3 :(得分:0)
这里没有人使用过URLSearchParams API,所以我想我会这样给你看:
function modifyLocation( param, value )
{
var qParams = window.location.search.split('?')[0];
var urlParams = new URLSearchParams(qParams);
if( urlParams.has(param) ){
urlParams.delete(param);
}
urlParams.append(param, value);
return window.location.href.split('?')[0] + '?' + urlParams.toString();
}
// To test on CodePen, I used editors = 4, because CodePen has that param
var newUrl = modifyLocation('editors','4');
console.log(newUrl);
// window.history.pushState("", "", newUrl);