用javascript替换URL中的参数值
最近在网上看到的JS替换URL的值,基本都是
function changeUrlArg(url, arg, arg_val){ var pattern = arg+'=([^&]*)'; var replaceText = arg+'='+arg_val; return url.match(pattern) ? url.replace(eval('/('+ arg+'=)([^&]*)/gi'), replaceText) : (url.match('[\?]') ? url+'&'+replaceText : url+'?'+replaceText); }
但是这个是有问题的,例如:url为:http://www.lllllllllll.com/test.testhtml?typeId=3&id=2&user_id=1,arg为id,arg_val为5,
通过替换的到:http://www.lllllllllll.com/test.testhtml?typeId=5&id=5&user_id=5,很面试这3个值都变了,因为替换值的时候是以“id=([^&]*)”为主的,还有正则是排除了大小写的,所以说新的值会替换所有的符合条件的。
然后我们实际想要的是:http://www.lllllllllll.com/test.testhtml?typeId=3&id=5&user_id=1,
进行实际操作,下面代码可自行优化:
<script> /* * 替换URL的参数值 * url 目标url * arg 需要替换的参数名称 * arg_val 替换后的参数的值 * return url 参数替换后的url */ function changeURLArg(url, arg, arg_val) { var pattern = arg + '=([^&]*)'; var replaceText = arg + '=' + arg_val; if (url.match(pattern)) { var retuenUrl = url; var temp = '/(\&' + arg + '=)([^&]*)/gi'; if (eval(temp).test(retuenUrl)) { retuenUrl = retuenUrl.replace(eval(temp), '&' + replaceText); } var temps = '/([\?])(' + arg + '=)([^&]*)/gi'; if (eval(temps).test(retuenUrl)) { retuenUrl = retuenUrl.replace(eval(temps), '?' + replaceText); } return retuenUrl; } else { // if (url.match('[\?]')) { if (url.indexOf('?') > 0) { return url + "&" + replaceText; } else { return url + "?" + replaceText; } } return url + '\n' + arg + '\n' + arg_val; } document.write(changeUrlArg('http://www.lllllllllll.com/test.testhtml?typeId=3&id=2&user_id=1', 'id', 5)); </script>
通过上述,得达到我们想要的结果,不懂的可以留言或者代码能优化的,可以留言,共同进步,嘿嘿嘿