Search code examples
javascriptjqueryurl

JavaScript - Get Portion of URL Path


What is the correct way to pull out just the path from a URL using JavaScript?

Example:
I have URL
http://www.somedomain.com/account/search?filter=a#top
but I would just like to get this portion
/account/search

I am using jQuery if there is anything there that can be leveraged.


Solution

  • There is a property of the built-in window.location object that will provide that for the current window.

    // If URL is http://www.somedomain.com/account/search?filter=a#top
    
    window.location.pathname // /account/search
    
    // For reference:
    
    window.location.host     // www.somedomain.com (includes port if there is one)
    window.location.hostname // www.somedomain.com
    window.location.hash     // #top
    window.location.href     // http://www.somedomain.com/account/search?filter=a#top
    window.location.port     // (empty string)
    window.location.protocol // http:
    window.location.search   // ?filter=a  
    


    Update, use the same properties for any URL:

    It turns out that this schema is being standardized as an interface called URLUtils, and guess what? Both the existing window.location object and anchor elements implement the interface.

    So you can use the same properties above for any URL — just create an anchor with the URL and access the properties:

    var el = document.createElement('a');
    el.href = "http://www.somedomain.com/account/search?filter=a#top";
    
    el.host        // www.somedomain.com (includes port if there is one[1])
    el.hostname    // www.somedomain.com
    el.hash        // #top
    el.href        // http://www.somedomain.com/account/search?filter=a#top
    el.pathname    // /account/search
    el.port        // (port if there is one[1])
    el.protocol    // http:
    el.search      // ?filter=a
    

    [1]: Browser support for the properties that include port is not consistent, See: http://jessepollak.me/chrome-was-wrong-ie-was-right

    This works in the latest versions of Chrome and Firefox. I do not have versions of Internet Explorer to test, so please test yourself with the JSFiddle example.

    JSFiddle example

    There's also a coming URL object that will offer this support for URLs themselves, without the anchor element. Looks like no stable browsers support it at this time, but it is said to be coming in Firefox 26. When you think you might have support for it, try it out here.