3分钟学习:获取 URL 查询参数值

2023-11-15

在前端开发工作中,利用 URL 进行参数传递是一项十分常见的方法。在页面跳转时,通过 URL 携带某些信息,如状态、id、区分页面来源的字段值等。因此,学习了解如何获取 URL 查询参数值是很重要的。

js 代码手撸

利用 JavaScript 代码手撸一个函数,对 URL 查询参数进行解析。这是方式灵活度高,可以进行更多个性化的操作。

const getSearchParams = (url) => {
  // 获取查询参数前的 ? 对应的索引位置
  const searchIndex = url.indexOf('?')
  // 截取出查询参数字符串,并根据 & 将其分割成一个个 name=bruce 形式字符串组成的数组
  const searchParamsArray = url.slice(searchIndex + 1).split('&')
  // 遍历数组,组成查询参数对象
  return searchParamsArray.reduce((pre, cur) => {
    const [key, value] = cur.split('=')
    return {
      ...pre,
      // 需要使用 decodeURIComponent 对参数进行解码
      [key]: decodeURIComponent(value),
    }
  }, {})
}

// { name: 'bruce', type: 'blog' }
getSearchParams('https://www.example.com?name=bruce&type=blog')

利用 URLSearchParams

const searchParams = new URLSearchParams('name=bruce&type=blog')

searchParams.get('name') // 'bruce'
searchParams.get('type') // 'blog'
searchParams.has('type') // true

要把所有查询参数转换为对象,需要搭配使用 entries()Object.fromEntries() 方法。

entries() 方法返回一个 iterator,还需进一步转换为对象。

const searchEntries = searchParams.entries();
Object.fromEntries(searchEntries) // { name: 'bruce', type: 'blog' }

需要注意的是,URLSearchParams 只能解析查询字符串,不能解析完整的 URL。因此若要使用其解析查询参数,需要事先提取出 URL 地址的查询字符串。

const params = new URLSearchParams('https://www.example.com?name=bruce&type=blog')

params.get('name') // null
params.get('https://www.example.com?name') // 'bruce'

参考链接:MDN-URLSearchParams

利用 URL

const params = new URL('https://www.example.com?name=bruce&type=blog')
const searchParams = params.searchParams

searchParams.get('name') // 'bruce'
searchParams.get('type') // 'blog'

URL 可对 URL 地址进行更多维度的解析,其中 searchParamsURLSearchParams 返回的对象相同。

image.png

参考链接:MDN-URL

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3分钟学习:获取 URL 查询参数值 的相关文章

  • Ajax文件上传

    我想使用 Ajax 和 php 上传文件 我有一个表格
  • 如何从 JavaScript 中的字符串中删除空白字符?

    如何从 JavaScript 中的字符串中删除空白字符 修剪很容易 但我不知道如何将它们从inside字符串 例如 222 334 gt 222334 您可以使用正则表达式 如下所示来替换所有空格 var oldString 222 334
  • 在 Google 表格脚本中设置活动单元格的值

    我想创建一个公式 在某个单元格更改上创建时间戳 下面的代码就可以了 我现在想做的是将公式转换为纯文本 将该时间戳锚定到工作表上 如果您手动执行此操作 您将选择时间戳 复制它们并将它们粘贴为值 我不想手动执行此操作 因此我创建了下面的脚本 它
  • libxmljs 的替代品 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 目标 使用 Node js 访问网页 使用 xpath 语法操作 DOM 并打印新的 DOM libxm
  • 您可以将现有的 div 复制到模式对话框吗

    我有一个带有多个面板的仪表板来显示不同的信息 我希望能够添加一个按钮来以模式显示面板 我正在使用引导程序 我所能找到的只是已经编写的模态 我想复制作为面板的 div 标签的内容 然后将其显示在模型中 但我不确定如何进行 该面板的 html
  • 如何在 Sequelize ORM 中限制连接行(多对多关联)?

    Sequelize 定义了两种模型 具有多对多关联的 Post 和 Tag Post belongsToMany db Tag through post tag foreignKey post id timestamps false Tag
  • 使用命名的成功/错误回调在 AngularJS 中声明一个 Promise

    我正在尝试做一些与 http 服务非常相似的事情 根据我的理解 http 返回一个 Promise 对象 使用它时 语法是 http success function data success callback error function
  • 在多个动态添加的表单上初始化 jQuery validate() 函数

    有人建议最好初始化一个 form validate 在页面加载而不是点击事件上运行 jquery form validate 插件仅允许在输入更改时提交 https stackoverflow com questions 10984196
  • React 应用程序中的 addEventListener 不起作用

    一些背景 我正在尝试消费自定义网络组件在 React 应用程序中并尝试监听来自 Web 组件的事件 我相信您不能只在自定义 Web 组件上以通常的反应方式处理事件 i e
  • 限制 Dropzone 仅上传特定类型的文件

    我正在使用 Dropzone 上传文件 这是我的代码 div div
  • setInterval() 在用户离开选项卡时暂停?

    javascript 中是否有任何方法的行为类似于 setInterval 并且当用户离开选项卡时停止并在用户再次进入选项卡时恢复 您可以使用以下方法创建自己的 API可见性API https developer mozilla org e
  • 将异步事件监听器与 Nestjs EventEmitter 模块和无服务器函数结合使用

    我正在尝试在 Nestjs EventEmitter 模块的帮助下实现具有无服务器 lambda 函数的异步工作线程 处理程序在发出事件时被调用 但该函数在 async await 调用之前关闭 我尝试过同时使用emit and emitA
  • put方法中的Angularjs文件上传不起作用

    我有一个简单的待办事项应用程序 我试图在其中上传照片和单个待办事项 现在我已经创建了这个工厂函数来负责待办事项的创建 todosFactory insertTodo function todo return http post baseUr
  • 自定义指令链接中的 element.replaceWith 仅在第一次调用时有效

    我是 Angularjs 的新手 不太了解幕后的情况 基本上我想创建一个 E 扭结指令 基于控制器中的数据 我动态创建html 就像整个 表 一样 以替换该指令 我的 html 文件中的指令是这样的
  • 尝试使用 Firebug 查找 JavaScript 文件中的函数

    我试图找到这个函数调用 myFooBar 该函数在某些 HTML 中内联引用 但页面加载了大量 JavaScript 并且在每个文件中搜索该函数需要相当多的工作 如何使用 Firebug 找到此函数所在的 JavaScript 文件 打开脚
  • JavaScript 中的实时摩尔斯电码转换器

    在看到谷歌关于莫尔斯电码 gmail 的愚人节笑话后 我想我应该尝试用 javascript 创建一个实时莫尔斯电码转换器 我正在使用正则表达式和替换将莫尔斯电码更改为字符 例如 replace g a replace g r 我遇到的问题
  • Outlook 加载项,无法读取未定义的属性“BeginRequestEventArgs”

    我使用 Visual Studio 开发了 Outlook 插件 我的插件有一个按钮 用于填充会议邀请正文中的详细信息并添加所需的与会者 这在 99 的情况下都有效 但是 时不时地它会给我下面的 JavaScript 错误 Uncaught
  • Javascript 中 if 语句中的假值?

    过去两周 我在学校研究 JavaScript 的事情已经有一段时间了 而且我一直在做我的作业 在 Douglas Crockford 所著的 JavaScript The Good Parts 一书中 作者在第 11 页上列出了 if 语句
  • 在方法内部执行方法

    我目前正在 FreeCodeCamp 中进行 JavaScript 练习 我的代码应该使用的测试用例之一是函数调用 如下所示 addTogether 2 3 这是我得到的基本功能 function addTogether return 当我
  • JQuery 删除和内存泄漏

    我正在开发一个游戏 我看到了很多内存消耗 我使用jquery animate 动画完成后 我 remove 元素 我的问题是 从 dom 树中删除一个元素后 对象还存在记忆中吗 Javascript 是一种垃圾收集语言 这意味着当没有代码保

随机推荐

  • <<计算机视觉CVPR>>2022:Grounded Language-Image Pre-training

    收录情况 CVPR 2022 论文链接 https arxiv org abs 2112 03857 代码链接 https github com microsoft GLIP 文章目录 简介 问题 方案 主要贡献 相关工作 方法 Groun
  • 12款开源或免费的3D建模软件

    1 Blender Blende是一款系统全面的3D建模套件 它提供了大量专业级功能和模块 跨平台支持所有的主要操作系统 目前并已成为免费3D软件的代名词 Blender通常被称为TheBlenderProject 因为它不仅仅是一个软件
  • Python 基础合集13:错误的调试和处理

    一 前言 本小节介绍了错误的调试和处理 包含了寻找出现bug的代码的方法 以及处理bug的方法 另外还附加了一些错误类型 环境说明 Python 3 6 windows11 64位 二 调试 找出错误 之前看到一句话 很在理 出错并不可怕
  • 汇编, 立即数, 有符号与无符号数

    汇编 立即数 有符号与无符号数 386 model flat stdcall option casemap none includelib msvcrt lib printf proto c ptr sbyte vararg data sz
  • C++语法总结

    1 const 与volatile 的用法 1 const include
  • 传统直线检测算法与基于深度学习的直线检测算法

    传统直线检测算法与基于深度学习的直线检测算法 提示 科大讯飞算法面试题 加入一个图像有一条很明显的直线划痕 怎么用传统图像处理去掉划痕 就是直线检测 文章目录 传统直线检测算法与基于深度学习的直线检测算法 TOC 文章目录 啥是直线检测 传
  • 【Python蓝桥杯】01字串 对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是: 00000 00001 00010 00011 00100 请按从小到大的顺序输出

    最近在刷蓝桥杯题目 按题目做一下笔记整理 顺便分享交流一下 有更好的解决方案欢迎大家共同提出探讨 以下源代码为系统提交满分答案 01字串 问题描述 资源限制 Python时间限制 5 0s 问题描述 对于长度为5位的一个01串 每一位都可能
  • JS数据结构与算法知识点--->字典

    此数据结构算法知识点系列笔记均是看coderwhy老师视频整理得出 字典一般是基于哈希表 后续学习 实现 数组 字典 集合 是几乎编程语言都会默认提供的数据类型 特点 一 一对应的关系 使用字典的方式 可以通过key取出value 键值对
  • SolidWorks装配体中子装配体无法移动的问题

    SolidWorks装配体中子装配体无法移动的问题 问题描述 问题解决 问题描述 有时候在一个装配体中有一个子装配体 这个子装配体没有被完全定义 子装配体之间的零件是可以相互移动的 但是在装配体中子装配体中的零件不可以相互移动 如下图 问题
  • CAN总线的报文分析(三)

    系列文章目录 文章目录 系列文章目录 前言 一 数据帧 最常用 1 帧起始 2 仲裁段 3 控制段 4 数据段 5 CRC段 6 ACK段 7 帧结束 二 远程帧 三 错误帧 四 过载帧 五 帧间隔 总结 前言 CAN总线上的节点发送数据都
  • Python for 3dMax加载图像文件并读取像素值

    使用Python for 3dMax加载和显示图像文件的示例 在这种情况下 EXR图像文件与3dMax文件位于同一目录中 from MaxPlus import BitmapManager image file path r BG park
  • 【编程笔试】美团2021校招笔试-通用编程题第5场(附思路及C++代码)

    导览 练习地址 修改大小写 式子求值 争夺地盘 公司管理 总结 练习地址 点此前往练习 修改大小写 在小美的国家 任何一篇由英文字母组成的文章中 如果大小写字母的数量不相同会被认为文章不优雅 现在 小美写了一篇文章 并且交给小团来修改 小美
  • 爬虫小项目

    爬取同花顺官网中的数据 共四页 项目适合练手 最终保存在csv文件中 尚有缺点 先发出来 一起探讨 qq 2385455226 欢迎来访 import requests from lxml import html headers Accep
  • 光线追踪渲染实战(五):低差异序列与重要性采样,加速收敛!

    项目代码仓库 GitHub https github com AKGWSB EzRT gitee https gitee com AKGWSB EzRT 目录 前言 1 低差异序列介绍 2 sobol 序列及其实现 2 1 生成矩阵与递推式
  • 面试官:线程崩了,为什么不会导致 JVM 崩溃呢?如果是主线程呢?

    网上看到一个很有意思的美团面试题 为什么线程崩溃崩溃不会导致 JVM 崩溃 这个问题我看了不少回答 但发现都没答到根上 所以决定答一答 相信大家看完肯定会有收获 本文分以下几节来探讨 线程崩溃 进程一定会崩溃吗 进程是如何崩溃的 信号机制简
  • Python中装饰器超详细讲解,看不懂尽管来砍我!

    Python中装饰器的那些事儿 说到装饰器 我们需要首先理解下闭包的概念 走起 定义 具有执行环境的函数 满足三个条件 1 外部函数中定义一个内部函数 2 内部函数中使用外部函数的局部变量 3 外部函数将内部函数作为返回值返回 此时的内部函
  • 算法:2-3平衡树与B树的详细探讨

    2 3树是最简单的B树 B 树是B树的升级 B树的来源 为什么要有树 描述 1 多 N M 层次等关系 从最根本的原因来看 使用树结构是为了提升整体的效率 插入 删除 查找 索引 尤其是索引操作 因为相比于链表 一个平衡树的索引时间复杂度是
  • js关闭当前弹出框,刷新父页面

    alert data msg 点击确定关闭该窗口 reload 关闭当前窗口 刷新上一层页面 location reload 执行结束 刷新当前页面 父级页面 点击操作按钮 点击保存 点击确定可以看到已经回到上一级页面 且已刷新
  • Java 线程同步 - 7种方式

    为何要使用同步 java允许多线程并发控制 当多个线程同时操作一个可共享的资源变量时 如数据的增删改查 将会导致数据不准确 相互之间产生冲突 因此加入同步锁以避免在该线程没有完成操作之前 被其他线程的调用 从而保证了该变量的唯一性和准确性
  • 3分钟学习:获取 URL 查询参数值

    在前端开发工作中 利用 URL 进行参数传递是一项十分常见的方法 在页面跳转时 通过 URL 携带某些信息 如状态 id 区分页面来源的字段值等 因此 学习了解如何获取 URL 查询参数值是很重要的 js 代码手撸 利用 JavaScrip