如何使用 JavaScript 获取 URL 参数?

在 JavaScript 中,获取 URL 参数是非常常见的操作,尤其是在 Web 开发中,常常需要获取查询字符串(query string)中的参数值来控制页面展示或进行 API 请求等操作。

方法 1: 使用 URLSearchParams 对象

URLSearchParams 是现代浏览器中提供的内置对象,它提供了一种方便的方法来解析和获取 URL 中的查询参数。

代码示例

假设我们有一个页面 URL 为:

https://www.example.com?user=JohnDoe&age=30&city=NewYork

我们想要获取 URL 中的参数值 useragecity

// 获取当前页面的 URL
const urlParams = new URLSearchParams(window.location.search);// 获取具体的参数值
const user = urlParams.get('user');  // 获取 'user' 参数
const age = urlParams.get('age');    // 获取 'age' 参数
const city = urlParams.get('city');  // 获取 'city' 参数console.log(`User: ${user}`);  // 输出: User: JohnDoe
console.log(`Age: ${age}`);    // 输出: Age: 30
console.log(`City: ${city}`);  // 输出: City: NewYork

解释

  1. window.location.searchwindow.location.search 会返回 URL 中的查询部分(包括 ? 号)。比如,https://www.example.com?user=JohnDoe&age=30&city=NewYork 中,window.location.search 会返回 "?user=JohnDoe&age=30&city=NewYork"

  2. URLSearchParams:它是一个可以轻松操作 URL 查询参数的接口。你可以使用它的 get() 方法来获取指定参数的值。

  3. get() 方法:它从查询字符串中获取特定的参数值。如果该参数不存在,它会返回 null

方法 2: 手动解析查询字符串

如果需要兼容旧版本的浏览器,或者出于某些其他需求,你可以通过原生 JavaScript 手动解析查询字符串。

代码示例
function getQueryParam(name) {const urlParams = window.location.search.substring(1);  // 获取查询字符串(去掉问号)const params = new URLSearchParams(urlParams);return params.get(name);
}// 测试
const user = getQueryParam('user');
const age = getQueryParam('age');
const city = getQueryParam('city');console.log(`User: ${user}`);  // 输出: User: JohnDoe
console.log(`Age: ${age}`);    // 输出: Age: 30
console.log(`City: ${city}`);  // 输出: City: NewYork

方法 3: 使用正则表达式解析查询字符串

有时,你可能希望使用正则表达式来解析 URL 查询参数,特别是当你需要做复杂的参数解析时。这种方法也适用于较老的浏览器。

代码示例
function getQueryParam(name) {const regex = new RegExp('[?&]' + name + '=([^&]*)', 'i');const result = regex.exec(window.location.search);return result ? decodeURIComponent(result[1]) : null;
}// 测试
const user = getQueryParam('user');
const age = getQueryParam('age');
const city = getQueryParam('city');console.log(`User: ${user}`);  // 输出: User: JohnDoe
console.log(`Age: ${age}`);    // 输出: Age: 30
console.log(`City: ${city}`);  // 输出: City: NewYork

解释

  1. window.location.search:它返回 URL 中的查询部分(包括 ?)。在我们这个例子中,它返回 "?user=JohnDoe&age=30&city=NewYork"

  2. RegExp:正则表达式的模式 [?&]${name}=([^&]*) 用来匹配查询字符串中指定参数的值。

    • [?&] 表示参数名之前可以是 ?&
    • ${name} 是你需要查找的参数名。
    • ([^&]*) 匹配参数值(直到下一个 & 符号或者字符串结束)。
  3. decodeURIComponent:由于 URL 编码可能会影响参数值的可读性(比如空格变成 %20),所以在获取到参数后,我们使用 decodeURIComponent() 来解码。

方法 4: 通过 window.location 解析完整的 URL

如果需要解析的是整个 URL(不仅仅是查询部分),你可以使用 window.location 对象提供的不同属性(如 href, search 等)来提取信息。

代码示例
function getQueryParamFromFullUrl(url, param) {const urlObj = new URL(url);return urlObj.searchParams.get(param);
}// 示例
const fullUrl = "https://www.example.com?user=JohnDoe&age=30&city=NewYork";
const user = getQueryParamFromFullUrl(fullUrl, "user");
const age = getQueryParamFromFullUrl(fullUrl, "age");
const city = getQueryParamFromFullUrl(fullUrl, "city");console.log(`User: ${user}`);  // 输出: User: JohnDoe
console.log(`Age: ${age}`);    // 输出: Age: 30
console.log(`City: ${city}`);  // 输出: City: NewYork

解释

  1. new URL(url):使用 URL 构造函数,可以创建一个新的 URL 对象,能够方便地访问各个部分(协议、域名、路径、查询参数等)。

  2. searchParams.get()searchParams 属性提供了一种访问 URL 查询参数的方式。

实际项目中的应用

在实际的项目中,获取 URL 参数常用于以下场景:

  • 表单提交后的页面重定向:你可能需要在 URL 中传递状态信息,例如表单提交成功后跳转并传递用户 ID 或操作状态。

  • 分页:比如请求列表数据时,可能需要传递 pagelimit 等分页参数。

  • 过滤器/搜索:用户在页面上进行筛选或搜索操作时,将筛选条件传递到 URL 参数中,以便能够重新加载相同的过滤状态。

代码示例:分页功能
// 假设我们有一个分页功能,URL 如:/products?page=2&limit=20function getPaginationParams() {const urlParams = new URLSearchParams(window.location.search);const page = urlParams.get('page') || 1;  // 默认值为 1const limit = urlParams.get('limit') || 10;  // 默认值为 10return { page, limit };
}const { page, limit } = getPaginationParams();
console.log(`当前页: ${page}, 每页显示: ${limit}`);

总结

获取 URL 参数的常见方法有:

  • 使用 URLSearchParams(推荐,适用于现代浏览器)。
  • 使用正则表达式或手动解析(适用于老版本浏览器)。
  • 使用 window.location 解析完整 URL。

这些方法可以根据需求灵活选择。在现代 Web 开发中,URLSearchParams 是最简洁、易用的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/888973.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SAFT(Synthetic Aperture Focusing Technique)基于合成孔径技术的图像重建方法

SAFT(Synthetic Aperture Focusing Technique)是一种基于合成孔径技术的图像重建方法,广泛应用于超声波成像、雷达成像等领域。它的核心思想是通过合成多个接收信号,模拟一个虚拟的更大孔径,从而提高成像系统的空间分辨率。与传统的成像方法相比,SAFT能够显著提高图像的质…

goLang之路(RSA加密算法)

RSA加密算法 RSA加密算法RSA之go与Java加解密算法对应关系签名算法对应关系密钥系列化与反序列化 生成密钥对密钥序列化为字符串(pkcs1标准不推荐再使用,而且Java标准库也不提供支持)密钥反序列化为密钥对象 留一个示例(Go与Java交…

鸿蒙ZRouter动态路由框架—NavDestnation页面模板化

前言 源码:https://gitee.com/common-apps/ZRouterOH:https://ohpm.openharmony.cn/#/cn/detail/hzw%2Fzrouter 基本使用 在介绍基本使用的流程中,我们知道每个子页面都需要通过NavDestination来包裹,这样会造成代码的冗余&…

【AIGC】如何获取ChatGPT外部GPTs应用的提示词Prompt指令和知识库文件

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AIGC | GPTs应用实例 文章目录 💯前言💯获取GPTs的提示词Prompt指令💯获取GPTs的知识库文件💯小结 关于GPTs指令如何在ChatGPT上使用,请看这篇文章&#xff…

沐风老师3DMAX摄相机阵列插件使用方法

3DMAX摄相机阵列插件,从网格对象或样条线的顶点法线快速创建摄相机阵列。该插件从网格的顶点或样条线的节点获取每个摄影机的位置和方向。 3DMAX摄相机阵列插件支持目前3dMax主流的物理相机、标准相机、VRay物理相机。 【版本要求】 3dMax 2015及更高版本 【安装方…

BMC VPD格式定义

1.说明 目前遇到有2种格式的VPD定义方式,特记录并分享出来。 本节可参考链接下载文件: https://gitee.com/wit_yuan/fru 2.参考PCI_Express_Base_6.0a.pdf 应用范围: 例如常见的定制raid卡,Hba卡采用的储存serial number等。 3.参考platform-manag…

每日速记10道java面试题23-Spring篇+Springboot篇

其他资料 每日速记10道java面试题01-CSDN博客 每日速记10道java面试题02-CSDN博客 每日速记10道java面试题03-CSDN博客 每日速记10道java面试题04-CSDN博客 每日速记10道java面试题05-CSDN博客 每日速记10道java面试题06-CSDN博客 每日速记10道java面试题07-CSDN博客 每…

4K高清壁纸网站推荐

1. Awesome Wallpapers 官网: https://4kwallpapers.com/ 主题: 创意、摄影、人物、动漫、绘画、视觉 分辨率: 4K Awesome Wallpapers 提供了丰富的高质量图片,分为通用、动漫、人物三大类,可以按屏幕比例和分辨率检索,满足你对壁纸的各种…

小迪笔记 第四十五天 sql 注入进阶 :二次注入,堆叠注入,数据读取(load_file)加外带

二次注入 概念:就是我们注入的语句(刚注入时 不会产生影响)但是我们的恶意代码会进入数据库 他在被二次利用的时候就会进行执行 这个就是二次注入 这个的典型案例就是账号密码的修改 : 大家应该也知道 账号注册一般是禁止你使…

双向链表容器

C中的list是一个双向链表容器&#xff0c;用于存储一系列的元素。它提供了在任意位置插入和删除元素的能力&#xff0c;同时还支持随机访问。 在C中&#xff0c;list是由标准模板库&#xff08;STL&#xff09;提供的容器之一。它位于<list>头文件中&#xff0c;并且通过…

正则表达式去除文本中括号()<>[]里的内容

一行文本中包含有各种括号&#xff0c;如()、<>、[]&#xff0c;我们希望把括号及括号内的内容0去除&#xff0c;可以通过正则表达式来实现。 匹配() pattern r\([^)]*\) # 匹配()匹配一个左括号(&#xff0c;然后匹配0个或多个不是右括号的任意字符[^)]*&#xff0c…

单击后移动至标记

单击后移动至标记 点击生成的表单之后&#xff0c;会在地图上自动的移动到改运动锻炼的位置 如何实现 实现这个我们肯定需要点击事件&#xff0c;但是我们需要去选取一个监听的类&#xff0c;我们使用事件委托的方式来创建这个点击事件&#xff1b; 实际代码 创建点击事件 …

C# 中的异常处理:构建健壮和可靠的程序

C#中的异常处理&#xff08;Exception Handling&#xff09;。异常处理是编程中非常重要的一部分&#xff0c;它允许开发者优雅地处理程序运行时可能出现的错误或意外情况。通过有效的异常处理&#xff0c;可以使应用程序更加健壮、可靠&#xff0c;并提供更好的用户体验。以下…

C# 中?. 和 ??

在 C# 中&#xff0c;?. 和 ?? 是两个不同的操作符&#xff0c;它们用于处理可能为 null 的对象。让我们分别解释这两个操作符以及它们的组合使用&#xff1a; 1. 可空类型 (?) 在 C# 中&#xff0c;? 用于定义可空值类型&#xff08;Nullable Value Types&#xff09…

[C++]继承

继承 概念使用方法继承方式子类的构造与析构 继承的成员继承成员在子类对象里的存放顺序成员变量普通成员变量静态成员变量 成员函数普通成员函数重定义&#xff08;隐藏&#xff09; 静态成员函数友元函数 单继承与多继承概念赋值转换&#xff08;切片&#xff09;多继承带来的…

机器人构建详解:售前售后服务客服机器人与广告生成机器人的微调数据处理方法

引言 大模型&#xff08;如BERT、GPT等&#xff09;在自然语言处理任务中展现了强大的能力&#xff0c;但为了使其更贴合特定应用场景&#xff0c;通常需要进行微调。本文将详细讲解如何为售前售后服务的客服机器人和广告生成机器人准备高质量的微调数据&#xff0c;并通过具体…

8.解决跨域问题的三种方案

开启域名&#xff0c;单点登录后&#xff0c;就使用最上面的接口了

全解:Redis RDB持久化和AOF持久化

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

QILSTE H6-C210LB/5M高亮蓝光LED灯珠 发光二极管LED

在电子照明领域&#xff0c;H6-C210LB/5M&#xff0c;这款高亮蓝光LED&#xff0c;以其精确的参数和卓越的性能&#xff0c;脱颖而出。本文将通过增加文本的复杂性和长短句的交替使用&#xff0c;深入探讨这款LED的技术参数&#xff0c;以增强文章的困惑性和突发性。 **H6-C21…

使用 ASP.NET Core HttpLoggingMiddleware 记录 http 请求/响应

我们发布了一个应用程序&#xff0c;该应用程序运行在一个相当隐蔽的 WAF 后面。他们向我们保证&#xff0c;他们的产品不会以任何方式干扰我们的应用程序。这是错误的。他们删除了我们几乎所有的“自定义”标头。为了“证明”这一点&#xff0c;我构建了一个中间件&#xff0c…