Use the URL
interface instead.
A
very clever hack
Show archive.org snapshot
to parse a structured URL object is to create a <a>
element and set its href
to the URL you want to parse.
You can then query the <a>
element for its components like schema, hostname, port, pathname, query, hash:
var parser = document.createElement('a');
parser.href = 'http://heise.de/bar';
parser.hostname; // => 'heise.de'
pathname = parser.pathname; // => '/bar'
if (pathname[0] != '/')
pathname = '/' + pathname // Fix IE11
One advantage vs. calling new URL(...)
is that it works with incomplete URLs. So if all you have is /path
it will fill in the hostname, protocol, etc. with data from the current page (as any <a>
tag would do):
var parser = document.createElement('a');
parser.href = 'foo'; // set the URL you want to parse (resolving relative paths in the context of the current URL)
parser.hostname; // => "makandracards.com"
parser.pathname; // => "/makandra/29377-the-easiest-way-to-parse-urls-with-javascript/foo"
if (pathname[0] != '/')
pathname = '/' + pathname // Fix IE11
Caveat: IE11 will return the pathname without leading slash. Make to employ the fix as noted above.
If you use
Unpoly
Show archive.org snapshot
you may also use up.util.parseUrl()
, which implements the technique in this card with tests and all caveats fixed.
Related topic: