前端js如何实现从浏览器的hash path上获取参数

news/2025/3/13 19:09:14/文章来源:https://www.cnblogs.com/longmo666/p/18770725

在前端JavaScript中,可以通过解析浏览器的URL中的hash部分来获取参数。Hash部分通常以 # 开头,后面跟着路径和查询参数。以下是一个示例代码,展示如何从URL的hash部分获取参数:

JavaScript
function getHashParams() {
// 获取当前URL的hash部分
const hash = window.location.hash;

// 去掉开头的 '#' 符号
const hashWithoutHash = hash.substring(1);// 将hash部分按 '&' 分割成多个键值对
const params = hashWithoutHash.split('&');// 创建一个对象来存储参数
const paramsObj = {};// 遍历每个键值对
params.forEach(param => {// 按 '=' 分割键和值const [key, value] = param.split('=');// 解码并存储到对象中if (key) {paramsObj[decodeURIComponent(key)] = decodeURIComponent(value || '');}
});return paramsObj;

}

// 使用示例
window.onload = function() {
const params = getHashParams();
console.log(params);
};

解释
获取当前URL的hash部分: 使用 window.location.hash 获取当前URL的hash部分。
去掉开头的 # 符号: 使用 substring(1) 去掉hash部分的开头的 # 符号。
将hash部分按 & 分割成多个键值对: 使用 split('&') 将hash部分按 & 分割成多个键值对。
创建一个对象来存储参数: 初始化一个空对象 paramsObj 来存储参数。
遍历每个键值对: 使用 forEach 遍历每个键值对。
按 = 分割键和值: 使用 split('=') 将键值对按 = 分割成键和值。
解码并存储到对象中: 使用 decodeURIComponent 解码键和值,并将它们存储到对象中。
返回参数对象: 最后返回包含所有参数的对象。
使用示例

在页面加载完成后,调用 getHashParams 函数,并在控制台中打印出参数对象。例如,如果URL是 http://example.com/#name=John&age=30,那么输出将是:

JavaScript

这样,你就可以轻松地从URL的hash部分获取参数了。

如何删除hash path上的指定参数,然后重新跳转呢

在前端JavaScript中,可以通过操作URL的hash部分来删除指定的参数,然后重新跳转。以下是一个示例代码,展示如何从URL的hash部分删除指定参数并重新跳转:

示例代码
JavaScript
function removeHashParam(param) {
// 获取当前URL的hash部分
const hash = window.location.hash;

// 去掉开头的 '#' 符号
const hashWithoutHash = hash.substring(1);// 将hash部分按 '&' 分割成多个键值对
const params = hashWithoutHash.split('&');// 创建一个新数组来存储过滤后的参数
const newParams = params.filter(p => {// 按 '=' 分割键和值const [key, value] = p.split('=');// 如果键不是要删除的参数,则保留该参数return key !== param;
});// 将新的参数数组重新拼接成字符串
const newHash = newParams.join('&');// 更新浏览器的URL,移除旧的hash部分并添加新的hash部分
if (newHash) {window.location.hash = `#${newHash}`;
} else {window.location.hash = '';
}

}

// 使用示例
window.onload = function() {
// 假设我们要删除名为 'age' 的参数
removeHashParam('age');
};

解释
获取当前URL的hash部分: 使用 window.location.hash 获取当前URL的hash部分。
去掉开头的 # 符号: 使用 substring(1) 去掉hash部分的开头的 # 符号。
将hash部分按 & 分割成多个键值对: 使用 split('&') 将hash部分按 & 分割成多个键值对。
创建一个新数组来存储过滤后的参数: 初始化一个空数组 newParams 来存储过滤后的参数。
遍历每个键值对: 使用 filter 方法遍历每个键值对。
按 = 分割键和值: 使用 split('=') 将键值对按 = 分割成键和值。
如果键不是要删除的参数,则保留该参数: 检查键是否等于要删除的参数,如果不是则保留该参数。
将新的参数数组重新拼接成字符串: 使用 join('&') 将新的参数数组重新拼接成字符串。
更新浏览器的URL: 使用 window.location.hash 更新浏览器的URL,移除旧的hash部分并添加新的hash部分。如果没有新的参数,则清空hash部分。
使用示例

在页面加载完成后,调用 removeHashParam 函数,并传入要删除的参数名称(例如 age)。这样,页面会重新加载,并且URL中的指定参数将被删除。

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

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

相关文章

虚拟试衣间

虚拟试衣间 一、团队介绍 1.1 团队概况 1.1.1 博客展示链接 团队名,组长博客链接https://www.cnblogs.com/c-eng/p/18763232 1.1.2 团队项目描述 虚拟试衣间 1.1.3 队员风采 姓名:曾成鑫 风格:Excellent Nimble Talented Perfect 擅长的技术:Python 编程的兴趣:c++ 希望的…

AI Agent替代化成风,企业HR SaaS如何选?| 盘点2025国内HR SaaS厂商Top10

自2025年以来,前有DeepSeek搅动国内外AI圈,后又国内外各大厂商纷纷加速AI技术及产品应用落地,紧随而来,在AI Agent成为又一关键热词,Manus携“全球首款通用Agent产品”再次掀起一番躁动。 如此喧嚣热闹的背景之下,向广大人力资源从业者传递一个强烈信号:AI技术的发展正在…

python的基本运用(3)——索引、切片、字符串

一、索引 索引在公司中一般也叫下标,或角标定义:可我们可以直接使用索引来访问序列中的元素,同时索引可分为正向索引和负向索引两种,而切片也会用到索引,如下图:Python中有序列:字符,列表,元组无序:集合正向索引:从0开始负向索引:-1开始二、切片 定义:切片是指对操…

[算法学习记录] 并查集(附例题)

并查集简介 并查集是一种重要的数据结构,主要用于实现节点之间的合并查询操作(例如判断两个节点是否属于同一个连通块(共享同一个父节点的节点组成的集合叫连通块)),在解决不相交集合时有很大的用处;并查集同样常用于处理无向图,来描述接点的连通性,在初始化时,每个节…

Electron 进程间通信(IPC)方法详解

Electron 是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架,它是基于 Chromium 和 Node.js 构建的,而 Chromium 本身是采用多进程架构的,所以 Electron 也是多进程的。 Electron 是一个多进程框架,它的进程主要分为两类:主进程(Main Process) 和 渲染进程(R…

从零开始的web前端学习-JavaScript

JavaScript 是一种运行在客户端(浏览器)的编程语言,实现人机互动效果:网页特效(监听用户的某些行为并令网页进行反馈) 表单验证(针对表单数据的合法性进行判断) 数据交互(获取后台数据并渲染到前端)JavaScript 组成ECMAScript:基础语法核心 Web APIs:DOM(页面文档…

【Azure Service Bus】分享使用 Python Service Bus SDK 输出SDK内操作日志

问题描述 使用Python代码消费Service Bus中的消息,默认情况 Console 中的信息都是通过 print 打印输出。 有时候需要调查更多SDK中的日志,那么如何才能让SDK输出更多的日志呢?问题解答 方法就是引入 Logging SDK,然后再初始化 ServiceBusClient 对象时,设置logging_enabl…

nvm和nodejs安装

nvm和nodejs安装安装 nvm 全名 node.js version management,顾名思义是一个nodejs的版本管理工具。通过它可以安装和切换不同版本的nodejs。首先下载安装包,可以用GitHub上的,可以有点看,也可以用一些镜像,然后点击安装一直下一步即可。 然后打开命令行,可以用nvm -v指令…

dify文件上传到http节点

dify系统上传sys.files变量是Array[File]类型,由于 HTTP 请求节点不支持 Array[File] 上传,需要单独处理每个文件,以下是实现此功能的步骤: 添加迭代节点 迭代输入选sys.files 输出选http请求body http请求body类型选form-data 键值选迭代的item.File 本文使用dify版本为0.…

可行性分析(第五组)

目录 第1章 系统分析 1.1 可行性分析 1.1.1 技术可行性分析 1.1.2 经济可行性分析 1.1.3 社会可行性分析 1.1.4 法律可行性分析 1.2 系统流程分析 1.2.1 系统开发总流程 1.2.2 登录流程 1.2.3 系统操作流程 1.2.4 系统性能分析 第1章 可行性分析 1.1可行性分析 下面分别从技术可…

C# 子窗体中调用父窗体中的方法(或多窗体之间方法调用)

看似一个简单的功能需求,其实很多初学者处理不好的,很多朋友会这么写:C# Code://父窗体是是frmParent,子窗体是frmChildA //在父窗体中打开子窗体 frmChildA child = new frmChildA(); child.MdiParent = this; child.Show();//子窗体调父窗体方法: //错误的调用!!!!!!!! …