背景
我们在日常开发中经常会遇到要对url中的参数进行修改和新增,但是自己手动每次敲就会导致代码很麻烦,且不易维护
而且可能会遇到一些特殊的需求,需要携带固定参数,进行页面的多次跳转这种情况(!!!)
方法
1.解析url中的参数(将正确的url地址输进去,自动返回解析以后的参数)
//获取url路径中的参数 const getQuery = (url) => { // result为存储参数键值的集合 const result = {} //建立正则匹配路径中有没有问号 var reg = /\?/g if (reg.test(url)) { // str为?之后的参数部分字符串 const str = url.substr(url.indexOf('?') + 1) // arr每个元素都是完整的参数键值 const arr = str.split('&') for (let i = 0; i < arr.length; i++) { // item的两个元素分别为参数名和参数值 const item = arr[i].split('=') result[item[0]] = item[1] } } return result }
2. 进行url参数的修改,更新,以及覆盖功能
const chanUrlData = (hostUrl='',orignJson={},newJson={}) => { //快速自定义url路径中的参数的原理,首先将url中的数据json获取下来,然后通过遍历将url中的数据进行新增和覆盖 //1. hostUrl='链接的host地址(链接'?'之前的部分) https://blog.csdn.net/qq_59747594/article/details/126397187' //2. orignJson='链接中问号后面的json数据' {name:wang,sex:1} //3. newJson='自定义在url里面路径的参数' {name:wangzhaoyang,money:1000000} for (let x in newJson) { orignJson[x] = newJson[x] } var newDataJson=[]//用来接收最新的生成url参数数据 for (var item in orignJson) { newDataJson.push(item + '=' + orignJson[item]) } if(newDataJson.length>0){ return hostUrl+'?'+newDataJson.join('&') }else{ return hostUrl } }
使用(仔细体会一下结果的那张截图)
var urlStr='https://blog.csdn.net/qq_59747594/article/details/126397187?name=wang&sex=1' console.log(getQuery(urlStr)) console.log(chanUrlData(urlStr.split('?')[0],getQuery(urlStr),{ name:'wangzhaoyang', money:10000000 }))
解释
就是为什么方法一和方法二我没有写在一块,那样不更简单吗,其实不然,因为在某些特殊的情况下,不需要进行url的解析直接就可以更简单拿到url中的数据
window.local(最方便兼容各种js)拿到路径全部信息(hash,host,hostname,href,origin,pathname,port,protocol)以及跳转路由__揽的博客-CSDN博客_js获取路由hash
uniapp,微信中
var pages = getCurrentPages();//获取所有页面的数组对象 var currPage = pages[pages.length - 1]; //当前页面 var beforePage= pages[pages.length - 2]; //上一个页面
(uniapp跳转回显),A页面进入B页面,B页面返回A页面,并传值给A页面(技巧绝对好用慢慢看)__揽的博客-CSDN博客_uniapp 页面返回传值