81

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?

Yahel
  • 37,023
  • 22
  • 103
  • 153
Josh Johnson
  • 10,729
  • 12
  • 60
  • 83

4 Answers4

124

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.

Christian C. Salvadó
  • 807,428
  • 183
  • 922
  • 838
45

How about use the standard URL object?

const url = new URL("http://www.example.com/some/path?name=value#anchor");
const { hash } = url;

Then console.log(hash) will output #anchor.

Warning: This interface is a bit new, so, if you're not using a transpiler, please, check the compatibility table and do your tests at target browsers.

Rael Gugelmin Cunha
  • 3,327
  • 30
  • 25
  • 4
    As long as you don't need to support Internet Explorer, this is definitely the best solution. The URL interface uses all the same property names as Location, so it's fully backwards compatible, but it also adds a very useful `searchParams` property. – Hayden Schiff Dec 05 '18 at 23:55
  • Don't forget the `new` in `new URL(`. – Boris Verkhovskiy Oct 23 '19 at 19:09
8

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
  • 204,599
  • 20
  • 195
  • 236
-6

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
  • 2,063
  • 1
  • 15
  • 22