【问题标题】:Replace url parameters function替换url参数功能
【发布时间】:2015-02-18 19:52:05
【问题描述】:

我从here in stack 得到这个函数来替换这样的url参数:

function replaceUrlParam(paramName, paramValue){
    var currentUrl = window.location.href;
    var pattern = new RegExp('('+paramName+'=).*?(&|$)') 
    var newUrl = currentUrl.replace(pattern,'$1' + paramValue + '$2');
    if(newUrl == currentUrl){
        newUrl = newUrl + (newUrl.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue 
    }
    window.history.pushState('',document.title,newUrl);
    return newUrl;
}

www.mysite.com/index.php?id=14&&cat=20

我就是这样使用它的:

replaceUrlParam('id', 15);

这样就可以了。

但问题是,如果我使用与 url 中相同的 id,它会重复 id。

replaceUrlParam('id', 14)--will give--->www.mysite.com/index.php?id=14&&cat=20&&id=14

如何更改此功能以在其 id 相同时不提供重复项? 谢谢

小提琴here

【问题讨论】:

  • 如果我对您的示例进行硬编码, jsfiddle.net/4dw8gh9j 似乎对我有用。你确定window.location.href 是你所期望的吗?
  • @dckuehn 它不起作用,http://jsfiddle.net/4dw8gh9j/1/ 正如我所说的,它在相同的 id 时重复。
  • 对不起,我经常为了自己的利益而读得太快。

标签: javascript url


【解决方案1】:

函数中的 if 语句说明了一切。如果 url 没有改变,那么它将参数/值添加到末尾。听起来您还想检查该值是否已经存在,例如:

if(newUrl == currentUrl && newUrl.indexOf(paramName+'='+paramValue) === -1) {
    //...
}

这是更新后的jsfiddle

【讨论】:

    【解决方案2】:

    www.mysite.com/index.php?id=14&&cat=20

    replaceUrlParam('id', 14)

    正在尝试用 id:14 替换 id:14。所以在这种情况下:newUrl == currentUrl 将解析为 true

    newUrl = newUrl + (newUrl.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue

    会找到'?'的索引,即24,即> 0。

    所以最后你这样做了:

    newUrl = www.mysite.com/index.php?id=15&&cat=20 + paramName + '=' + paramValue

    在任何一种情况下,如果您的 (currentUrl == newUrl) == true 您的串联最终会执行 newUrl = newUrl + '&' + paramName + '=' + paramValue 要么 newUrl = newUrl + '?' + paramName + '=' + paramValue

    无论哪种方式最终都会复制您的价值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 2019-08-17
      • 2013-05-18
      • 2015-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多