Instead of splitting from the ?
, you can use location.search
. It returns everything from (and including) the ?
until the end of the query string. If there's a hash, it stops right before #
.
Since it includes the ?
, you can do location.search.slice(1)
to get the string without the ?
.
Then you can do:
var queries = location.search
.slice(1)
.split('&')
.reduce(function(carry, query){
var queryPair = query.split('=');
carry[queryPair[0]] = queryPair[1];
return carry;
},{});
From ?foo=foovalue&bar=barvalue
, you can get something like:
var queries = {
foo: 'foovalue',
bar: 'barvalue',
}
I have to add that this only works for 1-level query string. Stuff like arrays (foo[]=foo0&foo[]=foo1
) and key-value pairs (foo[bar]=bar&foo[baz]=baz
) isn't covered in this logic.