javaurl参数值替换_修改url中参数的值
之前都是先取 window.location.href的值 然后取匹配关键字
近⽇在mdn上⾯发现了⼀个简便⽅法获取url中参数的值.  请点击这个链接到例⼦6
或者直接看这段代码(摘⾃MDN):
function loadPageVar (sVar) {
return decodeURI(window.place(new RegExp("^(?:.*[&\\?]" + encodeURI(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}
alert(loadPageVar("name"));
获取到该参数的值,然后 ⽤js的replace去替换吧,⽬前没有发现其他更好的办法
2016-03-29  今天再次使⽤到这个 发现⼀个特别好⽤的⽅法:
function updateQueryStringParameter(uri, key, value) {
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (uri.match(re)) {
java replace方法place(re, '$1' + key + "=" + value + '$2');
}
else {
return uri + separator + key + "=" + value;
}
}
-------------------------------------分割线-----------------------------------------
但是在使⽤途中遇到了两个问题:
1,实际上现在我们的需求是如果添加的parameter 的value 为空的时候 就不应该放到url⾥⾯,不然看起来特冗余且丑陋,
2,每⼀次我们都需要添加⼀个key value 特⿇烦,于是将⽅法做了⼀个⼩⼩的改造,核⼼还是引⽤他们的.
1,first step:
辅助⽅法 不变,获取url中某参数的值,请注意返回的值是解码后的url匹配值:
//辅助⽅法 获取url中参数的值
function loadPageVar (sVar) {
return decodeURI(window.place(new RegExp("^(?:.*[&\\?]" + encodeURI(sVar).replace(/[\.\+\*]/g, "\\$&") + "(?:\\=([^&]*))?)?.*$", "i"), "$1"));
}
2,second step:
修改url中参数的值,上⾯原po主没有处理传⼊参数的值为空的情况,我⽤最蠢的办法过滤了⼀下,请注意传⼊的url是要先解码,因为第⼀个辅助⽅法 loadPageVar返回值是解码后的匹配值:
//更新url中的参数,传为空则不会拼接到url中去 ,请注意 该⽅法传⼊的uri需要解码,不然会匹配不到
function updateQueryStringParameterNew(uri, key, value) {
//待修改 不严谨
if(value==''||value==null){
var oldValue=loadPageVar(key);
return uri.indexOf('&'+key+'='+oldValue)!=-place('&'+key+'='+oldValue,''):place(key+'='+oldValue,''); }
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");//忽略⼤⼩写
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (uri.match(re)) {
place(re, '$1' + key + "=" + value + '$2');
}
else {
return uri + separator + key + "=" + value;
}
}
3,third step:
⼀个⼀个值的传⼊修改url 特繁琐,咱们先将传⼊的各个参数丢到⼀个对象⾥⾯,然后去单个处理 最后返回⼀个url
//将多个参数以对象的⽅式传⼊⽅法,得到最终的url
function handleUrl(parameterObj,url){
var keys=Object.keys(parameterObj);
var localurl=url;
for(var index in keys){
localurl=updateQueryStringParameterNew(localurl,keys[index],parameterObj[keys[index]]);
}
return localurl;
}
在最后 咱们需要引⼊这三个公共⽅法 到帮助类⾥⾯.然后调⽤ handlerUrl⽅法,再强调⼀次 传⼊的url
需要解码.不然会匹配不到

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。