如何用javascript / jqueryreplaceurl参数?
我一直在寻找一个有效的方法来做到这一点,但一直没能find它,基本上我需要的是,给这个URL例如:
http://localhost/mysite/includes/phpThumb.php?src=http://media2.jupix.co.uk/v3/clients/4/properties/795/IMG_795_1_large.jpg&w=592&aoe=1&q=100
我希望能够改变使用JavaScript或jQuery的另一个值src
参数的URL,这是可能的吗?
提前致谢。
这不是一个更好的解决scheme吗?
var text = 'http://localhost/mysite/includes/phpThumb.php?src=http://media2.jupix.co.uk/v3/clients/4/properties/795/IMG_795_1_large.jpg&w=592&aoe=1&q=100'; var newSrc = 'www.google.com'; var newText = text.replace(/(src=).*?(&)/,'$1' + newSrc + '$2');
编辑:
在代码中增加了一些清晰度,并在结果链接中保留“src”
$1
代表()
(即) src=
的第一部分,而$2
代表()
(即) &
的第二部分,所以这表示你要改变src
和&
之间的值。 更清楚的是,应该是这样的:
src='changed value'& // this is to be replaced with your original url
我结合了其他的答案,并确保处理特殊情况:
- 参数在原始url中不存在
- 该参数是唯一的参数
- 该参数是第一个还是最后一个
- 新的参数值与旧的相同
- 该url以'?'结尾 字符
这是我的解决scheme:
function replaceUrlParam(url, paramName, paramValue){ if(paramValue == null) paramValue = ''; var pattern = new RegExp('\\b('+paramName+'=).*?(&|$)') if(url.search(pattern)>=0){ return url.replace(pattern,'$1' + paramValue + '$2'); } url = url.replace(/\?$/,''); return url + (url.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue }
编辑修正了以paramName结尾的参数匹配的问题。 增加了\ b的字边界。
EDIT2修复了只有问号结束时的问题。
已知的限制:
- 不通过将paramValue设置为null来清除参数,而是将其设置为空string。
这里是修改stenix的代码,它不是完美的,但它处理的情况下,在包含提供的参数,在URL中的参数,如:
/search?searchquery=text and 'query' is provided.
在这种情况下,searchquery参数值被改变。
码:
function replaceUrlParam(url, paramName, paramValue){ var pattern = new RegExp('(\\?|\\&)('+paramName+'=).*?(&|$)') var newUrl=url if(url.search(pattern)>=0){ newUrl = url.replace(pattern,'$1$2' + paramValue + '$3'); } else{ newUrl = newUrl + (newUrl.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue } return newUrl }
更新:让它成为一个很好的function: http : //jsfiddle.net/wesbos/KH25r/1/
function swapOutSource(url, newSource) { params = url.split('&'); var src = params[0].split('='); params.shift(); src[1] = newSource; var newUrl = ( src.join('=') + params.join('&')); return newUrl; }
然后去吧!
var newUrl = swapOutSource("http://localhost/mysite/includes/phpThumb.php?src=http://media2.jupix.co.uk/v3/clients/4/properties/795/IMG_795_1_large.jpg&w=592&aoe=1&q=100","http://link/to/new.jpg"); console.log(newUrl);
如果仔细观察,会发现两个有关URL的令人惊讶的事情:(1)它们看起来很简单,但细节和angular落案例实际上很难。(2)令人惊讶的是,JavaScript并没有提供一个完整的API来使它们更容易处理。 我认为一个完整的库是为了避免人们重新发明自己的轮子或抄袭一些随机的家伙的聪明,但可能是错误的正则expression式代码片段。 也许尝试URI.js( http://medialize.github.io/URI.js/ )
除了@stenix之外,这对我来说是完美的
url = window.location.href; paramName = 'myparam'; paramValue = $(this).val(); var pattern = new RegExp('('+paramName+'=).*?(&|$)') var newUrl = url.replace(pattern,'$1' + paramValue + '$2'); var n=url.indexOf(paramName); alert(n) if(n == -1){ newUrl = newUrl + (newUrl.indexOf('?')>0 ? '&' : '?') + paramName + '=' + paramValue } window.location.href = newUrl;
这里不需要保存“url”variables,只需要replace当前的url即可
怎么样这样的事情:
<script> function changeQueryVariable(keyString, replaceString) { var query = window.location.search.substring(1); var vars = query.split("&"); var replaced = false; for (var i = 0; i < vars.length; i++) { var pair = vars[i].split("="); if (pair[0] == keyString) { vars[i] = pair[0] + "="+ replaceString; replaced = true; } } if (!replaced) vars.push(keyString + "=" + replaceString); return vars.join("&"); } </script>