tags:

views:

51

answers:

3

Is it possible to create a new Location object in javascript? I have a url as a string and I would like to leverage what javascript already provides to gain access to the different parts of it.

Here's an example of what I'm talking about (I know this doesn't work):

var url = new window.location("http://www.example.com/some/path?name=value#anchor");
var protocol = url.protocol;
var hash = url.hash;
// etc etc

Is anything like this possible or would I essentially have to create this object myself?

+1  A: 

You can parse it in a regex to get the parts as matches... I don't have the full code right now, but this can be used to get the querydata:

var myUrl = window.location.href;
var matches = myUrl.match(/([^\?]+)\?(.+)/);
var queryData = matches[2];

matches[0] is the full string, matches(1) is the first part of the URL (up to the ?)... you could build up a regular expression to parse each part of a string url if you want...

You can also use one of the many libraries already out there for this.

Andir
+4  A: 

Well, you could use an anchor element to extract the url parts, for example:

var url = document.createElement('a');
url.href = "http://www.example.com/some/path?name=value#anchor";
var protocol = url.protocol;
var hash = url.hash;

alert('protocol: ' + protocol);
alert('hash: ' + hash);
​

It works on all modern browsers and even on IE 5.5+.

Check an example here.

CMS
I didn't know you could do that. Neat.
lawnsea
+1 what I was typing. That `<a>` elements implement the `location` URL decomposition attributes goes back to the earliest JavaScript versions and is supported everywhere. It is (finally!) standardised in the HTML5 spec.
bobince
+1. Ditto. I had no idea that `<a>` implemented location either.
Josh Johnson
A: 

You can leverage the power of an anchor element

var aLink = document.createElement("a");
aLink.href="http://www.example.com/foo/bar.html?q=123#asdf";
alert(aLink.pathname);
epascarello