window.location.herf获取到路径,然后处理携带的参数,将?name=“张三”&age="18"改为{name:张三,age:18}
直接看代码吧
感觉这里封装的处理单双引号那里感觉有些多余,一般情况下?后面携带的参数都是双引号包裹的吧
欢迎留言讨论
const queryString = () => {
// 将路径以?分割成数组拿到?后面的参数
const path = decodeURI(window.location.href).split('?')[1]
// 定义处理后的参数对象,最终将参数以key value的形式返回
const queryString = {}
// 判断参数是否有多个 如name='张三'&age='18'
if (path.includes('&')) {
// 将多参数以&分割成数组然后遍历
const tempArr = path.split('&')
tempArr.forEach((item) => {
// 将每个参数以=分割如 name='张三' ==> [name,"'张三'"]
const itemArr = item.split('=')
const key = itemArr[0]
const tempValue = itemArr[1]
// 将'张三'的单引号去掉 ==> 张三
if (tempValue.includes("'")) {
const value = tempValue.replace(/^'|'$/g,'')
// 给queryString对象赋值 将最初的[name,'张三'] ==> {name: '张三'}
queryString[key] = value
}
// 将"张三"的双引号去掉 ==> 张三
if (tempValue.includes('"')) {
const value = tempValue.replace(/^"|"$/g,'')
queryString[key] = value
}
})
}else {
// 参数中不包含&,说明只有一个键值对直接用=分割成数组之后赋值成对象
const key = path.split('=')[0]
const tempValue = path.split('=')[1]
if(tempValue.includes("'")) {
const value = tempValue.replace(/^'|'$/g,'')
queryString[key] = value
}
if (tempValue.includes('"')) {
const value = tempValue.replace(/^"|"$/g,'')
queryString[key] = value
}
}
console.log('处理后的参数', queryString)
return queryString
}
const query = queryString()
console.log('处理后的参数', query) // {name: '张三', age: 18}
方法写完之后想起来了有qs
服了自己了
啊啊啊啊啊啊
npm install qs
let url = 'http://item.taobao.com/item.htm?name=张三&age=18;
let data = qs.parse(url.split('?')[1]);
// data的结果是
{
name: '张三',
age: 18
}