How do I parse a URL into hostname and path in javascript?

前端 未结 22 1489
南方客
南方客 2020-11-21 22:38

I would like to take a string

var a = \"http://example.com/aa/bb/\"

and process it into an object such that

a.hostname == \         


        
22条回答
  •  野的像风
    2020-11-21 23:21

    Cross-browser URL parsing, works around the relative path problem for IE 6, 7, 8 and 9:

    function ParsedUrl(url) {
        var parser = document.createElement("a");
        parser.href = url;
    
        // IE 8 and 9 dont load the attributes "protocol" and "host" in case the source URL
        // is just a pathname, that is, "/example" and not "http://domain.com/example".
        parser.href = parser.href;
    
        // IE 7 and 6 wont load "protocol" and "host" even with the above workaround,
        // so we take the protocol/host from window.location and place them manually
        if (parser.host === "") {
            var newProtocolAndHost = window.location.protocol + "//" + window.location.host;
            if (url.charAt(1) === "/") {
                parser.href = newProtocolAndHost + url;
            } else {
                // the regex gets everything up to the last "/"
                // /path/takesEverythingUpToAndIncludingTheLastForwardSlash/thisIsIgnored
                // "/" is inserted before because IE takes it of from pathname
                var currentFolder = ("/"+parser.pathname).match(/.*\//)[0];
                parser.href = newProtocolAndHost + currentFolder + url;
            }
        }
    
        // copies all the properties to this object
        var properties = ['host', 'hostname', 'hash', 'href', 'port', 'protocol', 'search'];
        for (var i = 0, n = properties.length; i < n; i++) {
          this[properties[i]] = parser[properties[i]];
        }
    
        // pathname is special because IE takes the "/" of the starting of pathname
        this.pathname = (parser.pathname.charAt(0) !== "/" ? "/" : "") + parser.pathname;
    }
    

    Usage (demo JSFiddle here):

    var myUrl = new ParsedUrl("http://www.example.com:8080/path?query=123#fragment");
    

    Result:

    {
        hash: "#fragment"
        host: "www.example.com:8080"
        hostname: "www.example.com"
        href: "http://www.example.com:8080/path?query=123#fragment"
        pathname: "/path"
        port: "8080"
        protocol: "http:"
        search: "?query=123"
    }
    

提交回复
热议问题