替换url参数功能

时间:2014-12-19 20:31:43

标签: javascript url

我从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);

这样的工作正常。

但问题是,如果我使用相同的ID,它会复制id。

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

如何更改此功能,以便在相同ID时不提供重复项? 感谢

小提琴here

2 个答案:

答案 0 :(得分:2)

函数中的if语句解释了所有内容。如果url没有改变,那么它将param / value粘贴到最后。听起来你还想检查那里的值是否已经存在,例如:

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

这是更新后的jsfiddle

答案 1 :(得分:1)

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

无论哪种方式都会在最后复制你的价值。