如何编辑此函数并使其设置URL参数(如果它不存在)

时间:2017-08-21 20:24:52

标签: javascript jquery

以下函数旨在替换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);
}

有功能。它需要您要替换的参数名称以及您要设置的值。

正如我之前所说,我希望它不仅能够替换变量,还能够设置它们。

谢谢!

4 个答案:

答案 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);