Thursday, May 23, 2024
 Popular · Latest · Hot · Upcoming
161
rated 0 times [  167] [ 6]  / answers: 1 / hits: 43997  / 13 Years ago, wed, april 13, 2011, 12:00:00

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 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.


More From » javascript

 Answers
15

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>




[#92763] Tuesday, April 12, 2011, 13 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
bobbyallanh

Total Points: 693
Total Questions: 120
Total Answers: 101

Location: Bermuda
Member since Thu, Apr 20, 2023
1 Year ago
bobbyallanh questions
;