Javascript 拆分并分析window.location.hash

Javascript 拆分并分析window.location.hash,javascript,Javascript,我在正确拆分和解析window.location.hash时遇到问题 首先,我们在散列中得到的参数很少,例如: #loc=austria&mr=1&min=10&max=89 正如你所看到的,它是为搜索而创建的。当用户单击分页链接时,页面将重新加载哈希。到目前为止还不错 我创建了函数initialise(),每当URL中有散列时都会调用该函数: if (window.location.hash) { var params = (window.location.h

我在正确拆分和解析window.location.hash时遇到问题

首先,我们在散列中得到的参数很少,例如:

#loc=austria&mr=1&min=10&max=89
正如你所看到的,它是为搜索而创建的。当用户单击分页链接时,页面将重新加载哈希。到目前为止还不错

我创建了函数initialise(),每当URL中有散列时都会调用该函数:

if (window.location.hash) {
    var params = (window.location.hash.substr(1)).split("&");

    for (i = 0; i < params.length; i++)
    {
        var a = params[i].split("=");
        // Now every parameter from the hash is beind handled this way
        if (a[0] == "loc")
        {
            locationList(a[1]);
        }
    }
}
if(window.location.hash){
var params=(window.location.hash.substr(1)).split(“&”);
对于(i=0;i
一切都很正常。。。当我选择所有搜索参数时,哈希正在。。。切。不知为什么。我尝试使用
if(params.indexOf('loc'))
而不是
a[0]==“loc”
,但没有任何运气

你能帮我一下吗

编辑

当然,我使用的是var a=。。。在循环中,这只是复制粘贴错误。

params。indexOf('loc')
不会返回值,因为
loc
params
数组中不存在。您在提供的示例中查找的项目是
loc=austria
。如果只按键进行选择,则需要一些循环来检查每个键值对。

如果只是所要查找的哈希中的
loc
的值,则不需要循环。这也应该起作用

var lochash    = location.hash.substr(1),
    mylocation = lochash.substr(lochash.search(/(?<=^|&)loc=/))
                  .split('&')[0]
                  .split('=')[1];
if (mylocation) {
   locationList(myLocation);
}

如果您使用的是jQuery,请查看

它“利用HTML5 hashchange事件”,它基本上允许您在哈希更改后执行JavaScript代码


此外,它还提供了一个强大的“”函数,允许您“解析URL或当前window.location中的查询字符串,将其反序列化为对象,可以选择强制数字、布尔值、空值和未定义的值。”

这应该是一种更简单的读取位置的方法。哈希:

    var hash = window.location.hash.substring(1);
    var params = {}
    hash.split('&').map(hk => { 
      let temp = hk.split('='); 
        params[temp[0]] = temp[1] 
    });
    console.log(params); //Here are the params to use
然后,你可以使用

params.access_token //access_token 
params.id //id 

当我选择“所有搜索参数”时,散列中可用的其他参数正在。。。切。我不明白这句话……当我有这样的散列时,页面重新加载后,它是
。\loc=austria&mr=1&min=10&max=89
。你试过
如果(params[I].indexOf('loc')
,你是对的。现在我意识到我有一个逻辑错误(即使哈希存在,也调用buildRequestHash()函数)。谢谢。从技术上讲,如果在值字符串中使用“=”,则会有一个小错误。。。想想这个例子“#key1=foo=bar,alloc=true&loc=…”。没什么大不了的,只是我碰到的东西。干杯也匹配
#bloc=thing
@Hugo:你说得对。“更现代的方法”对
/(?