Split and parse window.location.hash
I'm facing issues with splitting and parsing window.location.hash correctly.
First of all, we get few parameters in hash, ex:
#loc=austria&mr=1&min=10&max=89
As you surely see it's been created for search. When user clicks on pagination link page is being reloaded with the hash. So far so good.
I 开发者_JAVA百科created function initialise() that is calling every time when there's hash in the 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]);
}
}
}
Everythig is almost working... When I choose all search params hash is being... cut. For unknown reason for me. I tried to use if( params.indexOf('loc') )
instead of a[0] == "loc"
without any luck.
Could you lend me a hand?
Edit
Of course, I was using var a = ... in the loop, it was only copy-paste error.You don't need a loop, if it's only the value of loc
from the hash you're after. This should also work.
var lochash = location.hash.substr(1),
mylocation = lochash.substr(lochash.search(/(?<=^|&)loc=/))
.split('&')[0]
.split('=')[1];
if (mylocation) {
locationList(myLocation);
}
Concerning the trunctating of the hash after a page reload: imho that isn't related to your loop.
Edit A more modern and more accurate approach:
const result = document.querySelector("#result");
const hash2Obj = "loc=austria&mr=1&min=10&max=89"
.split("&")
.map(v => v.split("="))
.reduce( (pre, [key, value]) => ({ ...pre, [key]: value }), {} );
result.textContent += `loc => ${hash2Obj.loc}
----
*hash2Obj (stringified):
${JSON.stringify(hash2Obj, null, ' ')}`;
<pre id="result"></pre>
This should be a rather simpler way to read from location.hash:
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
and then, you could use
params.access_token //access_token
params.id //id
and other params that are available inside the hash
params.indexOf('loc')
will not return a value as loc
does not exist within the params
array. The item that you are looking for in the example provided is loc=austria
. If you are only selecting by the key then you would need some looping to examine each key-value pair.
精彩评论