Take the 2-minute tour ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

I have a URL in this format:

http://localhost:57279/AssociateCaseDetails?UId=176948&caseID=1123

I need the values of UId and CaseID:

var UId =window.location.href.split("?")[1].split("&")[0].split("=")[1];

It’s working, but is there a better way to access the same, given the same URL?

share|improve this question

1 Answer 1

up vote 8 down vote accepted

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.

share|improve this answer
    
+1 for significant increase in readability –  A Red Herring Mar 26 at 12:13

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.