我从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
答案 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
无论哪种方式都会在最后复制你的价值。