当前位置: 首页 > news >正文

获取 url 地址栏 ? 后面的查询字符串,并以键值对形式放到对象里面

写在前面

在前端面试当中,关于 url 相关的问题很常见,而对于 url 请求参数的问题也很常见,大部分以笔试题常见,今天就根据这道面试题一起来看一下。

问题

获取 url 地址栏?后面的查询字符串,并以键值对形式放到对象里面。

我们以百度为例:

我在百度搜索掘金,url 为以下格式

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=68018901_3_dg&wd=%E6%8E%98%E9%87%91&oq=%25E6%2590%259C%25E7%25B4%25A2&rsv_pq=d2454dd90049702a&rsv_t=598fAS5T78kkZ23tFIcK1kZLSsa4GB8sRQSPvNKJ%2BizDR%2FMcYnE4%2BaylKTnlCrdjTquMiQ&rqlang=cn&rsv_dl=tb&rsv_enter=1&rsv_sug3=10&rsv_sug1=6&rsv_sug7=100&rsv_sug2=0&rsv_btype=t&inputT=2760&rsv_sug4=3716

可以看到,url的 ?后面有很多请求参数

我们先来获取 ? 后面的内容

使用 window.location 打印看看

 可以看到 searh 里面是我们想要的内容,打印看看

 

没问题,所以使用 window.location.search可以获取 ? 后面的内容

但是现在我们不仅需要获取 ? 后面的内容,还需要将请求参数提取出来。

一般情况下我们可能使用 & 先进行分割,然后再使用 = 进行分割,最后循环提取出来,这样可以实现,但是不是特别方便,接下来介绍一个方法,很适合这类问题

解决

使用 URLSearchParams

MDN 官方解释如下

URLSearchParams - Web API | MDN (mozilla.org)

 在示例当中看到,可以直接使用 for of 迭代查询参数

我们看一下迭代出来的结果是什么

  let windowUrl = window.location.search let bUrl = new URLSearchParams(windowUrl)for (const [key, value] of bUrl) {obj[key] = valueconsole.log('key: ', key);console.log('value: ', value);}

可以看到,直接拿到相对应的请求参数

最后将解构出来的数据存到对象里就行了

  let obj = {}for (const [key, value] of bUrl) {obj[key] = value}console.log('obj: ', obj)

因为我们需要用到 window.location.search 进行模拟代码,所以直接在vscode里面调试不太方便,这里推荐大家使用,源代码 - 片段 - 新建片段进行调试代码,比直接在控制台写代码方便一些,写完右键执行,就可以在控制台看结果了。

完整代码

  let windowUrl = window.location.search let bUrl = new URLSearchParams(windowUrl)let obj = {}for (const [key, value] of bUrl) {obj[key] = valueconsole.log('key: ', key);console.log('value: ', value);}console.log('obj: ', obj)

 总结

首先我们使用 window.location.search  获取 ? 后面的请求参数

在获取到请求后直接使用 URLSearchParams  进行处理

对处理完的数据进行 for of 循环拿到里面的请求参数

最后直接存到 obj 对象中即可

http://www.lryc.cn/news/387227.html

相关文章:

  • List接口, ArrayList Vector LinkedList
  • 探讨数字化背景下VSM(价值流程图)的挑战和机遇
  • Conda跨平台环境迁移
  • 全面掌握 Jackson 序列化工具:原理、使用与高级配置详解
  • mathtype7.4永久激活码密钥及2024最新破解版注册码附安装教程
  • 【SQL】优化慢 SQL的简单思路
  • 禁止浏览器对input的自动填充和填充提示(适用于谷歌、火狐、Edge(原IE浏览器)等常见浏览器)
  • 鸿蒙项目实战-月木学途:1.编写首页,包括搜索栏、轮播图、宫格
  • 深入浅出:npm常用命令详解和实践
  • 山东大学-科技文献阅读与翻译(期末复习)(选择题+翻译)
  • 二分查找:自定义 upper_bound、lower_bound
  • Java 搭建个人博客基本框架
  • 停车场智能化管理:车位引导系统实现车位资源优化与数据分析
  • 梯度下降法
  • 【高考志愿】光学工程
  • Golang | Leetcode Golang题解之第205题同构字符串
  • 【Unity】RPG2D龙城纷争(五)关卡编辑器之地图编辑
  • 音视频入门基础:H.264专题(4)——NALU Header:forbidden_zero_bit、nal_ref_idc、nal_unit_type简介
  • 基于深度学习的人脸关键点检测
  • C++自定义智能指针
  • 一个合理的前端应用文件结构
  • spring和springboot的关系是什么?
  • 智慧校园-医务管理系统总体概述
  • AUTOSAR汽车电子嵌入式编程精讲300篇-智能网联汽车CAN总线-基于电压信号的CAN总线入侵检测系统设计与实现
  • BLACKBOX.AI:解锁编程学习新纪元,加速开发的AI得力助手
  • 实验三 时序逻辑电路实验
  • 云计算基础技术
  • 【动态规划】2306. 公司命名
  • 熟练掌握爬虫技术
  • 基于Spring Boot与Vue的智能房产匹配平台+文档