获取hash链接(hash片段)的参数

URL 结构:URL 由多个部分组成,包括协议(如 httphttps)、主机名(如 www.example.com)、端口号(可选,默认为 80 或 443)、路径(如 /path/to/page)、查询字符串(如 ?id=123&name=John)以及哈希片段(如 #section2)。

window.location.hash

通过 window.location.hash 属性来访问当前 URL 的哈希片段。这个属性返回包括 # 符号的哈希部分,例如 #section2

获取hash片段中的参数的方法
function getHashParams() {
    const hash = window.location.hash.substr(1); // 去掉开头的 #
    const params = {};

    if (hash) {
        const parts = hash.split('?'); // 以 ? 分割
        const path = parts[0]; // 获取路径部分
        params.path = path; // 存储路径

        if (parts.length > 1) {
            const queryString = parts[1]; // 获取查询参数部分
            const paramPairs = queryString.split('&');

            paramPairs.forEach(pair => {
                const [key, value] = pair.split('=');
                params[key] = decodeURIComponent(value || ''); // 解码参数值
            });
        }
    }

    return params;
}

const params = getHashParams();
console.log(window.location.hash); //URL 中的哈希链接
console.log(params.path); // 输出路径
console.log(params.id); // 输出 id 参数的值
console.log(params.name); // 输出 name 参数的值
例子
  1. 链接1:

    http://127.0.0.1:5500/hash.html#?id=2&name=winney
    

    输出结果:

    #?id=2&name=winney
    
    2
    winney
    
  2. 链接2:

    http://127.0.0.1:5500/hash.html#/?id=2&name=winney
    

    输出结果:

    #/?id=2&name=winney
    /
    2
    winney
    
  3. 链接3:

    http://127.0.0.1:5500/hash.html#/test/text.html?id=2&name=winney
    

    输出结果:

    #/test/text.html?id=2&name=winney
    /test/text.html
    2
    winney
    

注意:查询参数前需要加上?

getHashParams()方法适合以上3种情况的hash链接获取参数

如果不使用params.id这种方法获取参数对应的值,也可以使用解构赋值获取需要的参数:

const { id, name } = params;
根据参数名获取对应的值

getHashParams()方法是一次性返回全部参数。如果想通过传参数名来获取参数对应的值,可以给getHashParams()方法添加参数

/*
** @param paramName{string}    // 参数名
*/
function getHashParams(paramName) {
    const hash = window.location.hash.substr(1); // 去掉开头的 #
    const params = {};

    if (hash) {
        const parts = hash.split('?'); // 以 ? 分割
        const path = parts[0]; // 获取路径部分
        params.path = path; // 存储路径

        if (parts.length > 1) {
            const queryString = parts[1]; // 获取查询参数部分
            const paramPairs = queryString.split('&');

            paramPairs.forEach(pair => {
                const [key, value] = pair.split('=');
                params[key] = decodeURIComponent(value || ''); // 解码参数值
            });
        }
    }

    // 如果提供了参数名称,返回特定参数的值;否则返回所有参数
    if (paramName) {
        return params[paramName] || null; // 返回特定参数的值或 null(如果参数不存在)
    } else {
        return params;
    }
}

const id = getHashParams('id');
console.log(id); // 输出 id 参数的值
var params_all = getHashParams();
console.log(params_all); // 输出所有参数
const age = getHashParams('age');
console.log(age); // 输出 age 参数的值

链接:

http://127.0.0.1:5500/hash.html#/test/text.html?id=2&name=winney

结果:

2
{path: '/test/text.html', id: '2', name: 'winney'}
null
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Redis 中可以使用 Redis Hash 数据类型来存储和获取 hash 表。使用命令 `HSET` 可以将一个 field-value 对设置到 hash 表中,使用命令 `HGET` 可以获取某一个 field 的值。也可以使用 `HGETALL` 命令获取整个hash表的所有键值对。 ### 回答2: Redistemp是一个基于Redis的封装库,主要用于实现分布式锁、计数器等常见的分布式任务调度问题。在Redistemp中,获取hash表可以通过一些简单的操作来完成。 首先,我们需要创建一个Redistemp对象,该对象用于连接Redis服务器。然后,我们可以使用该对象的hset方法来向hash表中插入键值对。例如: ``` Redistemp rt = new Redistemp("localhost", 6379); // 创建Redistemp对象并连接Redis服务器 rt.hset("myhash", "field1", "value1"); // 向名为myhashhash表中插入键值对field1-value1 ``` 除了插入键值对,Redistemp还提供了hget、hdel等方法来获取和删除hash表中的键值对。例如: ``` String value = rt.hget("myhash", "field1"); // 获取名为myhashhash表中field1对应的值 rt.hdel("myhash", "field1"); // 删除名为myhashhash表中的field1键值对 ``` 此外,Redistemp还提供了更多的功能来操作hash表,例如批量插入(hmset)、批量获取(hmget)、获取所有字段名(hkeys)、获取所有字段值(hvals)等。通过这些方法,我们可以方便地获取和操作hash表中的数据。 总之,Redistemp是一个易于使用的库,可以通过简单的方法来获取Redis中的hash表。用于分布式任务调度中的场景,Redistemp能够提供多种选择和灵活的操作方式,使得开发者能够便捷地实现分布式任务调度的功能。 ### 回答3: Redistemp是基于Redis的一个高性能分布式临时数据存储系统,用于解决分布式系统中的临时数据的读写和删除问题。在Redistemp中,获取hash表的方式如下: 1. 使用Redis的命令来获取hash表的数据。Redistemp封装了一系列常用的Redis命令,包括获取整个hash表的命令。可以通过指定hash表的名称和键值来获取对应的数据。例如,通过执行"HGETALL"命令来获取整个hash表的数据。 2. 使用Redistemp提供的高级API来获取hash表的数据。Redistemp提供了基于Java语言的API,可以通过调用API的方式来获取hash表的数据。API中提供了一系列方法,可以根据键值获取对应的数据,例如,调用"getHash"方法来获取指定键值的数据。 3. 使用Redistemp提供的迭代器来逐一获取hash表的数据。Redistemp提供了基于迭代器的方式来遍历hash表的数据。可以通过获取迭代器对象,并使用循环来逐一获取hash表中的每个键值对。 需要注意的是,获取hash表的数据时要确保连接到正确的Redis实例,并传入正确的hash表名称和键值。同时,要根据具体的业务需求和性能需求选择合适的获取方式,以确保获取hash表的效率和准确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值