Wie analysiere ich eine URL in Javascript in Hostname und Pfad?


379

Ich würde gerne eine Schnur nehmen

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

und verarbeiten Sie es zu einem Objekt, so dass

a.hostname == "example.com"

und

a.pathname == "/aa/bb"

11
Falls Sie auf der aktuellen URL arbeiten, können Sie zugreifen hostnameund pathnamedirekt aus dem locationObjekt.
Rvighne

1
was ist mit "lastPathPart"?
Victor

Nicht Regex, aber das Python-Modul tldextract macht genau das: github.com/john-kurkowski/tldextract
Oliver Oliver

Antworten:


395

Der moderne Weg:

new URL("http://example.com/aa/bb/")

Gibt ein Objekt mit Eigenschaften hostnameund pathnamezusammen mit einigen anderen zurück .

Das erste Argument ist eine relative oder absolute URL. Wenn es relativ ist, müssen Sie das zweite Argument (die Basis-URL) angeben. Zum Beispiel für eine URL relativ zur aktuellen Seite:

new URL("/aa/bb/", location)

Neben Browsern ist diese API seit Version 7 auch in Node.js verfügbarrequire('url').URL .


7
Nett! Relative URLs brechen es aber ... :( new URL('/stuff?foo=bar#baz')->SyntaxError: Failed to construct 'URL': Invalid URL
lakenen

56
Experimentelle Technologie: IE unterstützt dies nicht! developer.mozilla.org/en-US/docs/Web/API/URL/…
cwouter

10
@cwouter: Es funktioniert jedoch in Edge, das IE
rvighne

4
Dies ist der Weg, um es zu tun, Rand ist bereits 3 Versionen über dh dh es spielt keine Rolle
Claudiu Creanga

7
Die Tatsache, dass JavaScript keine integrierte Methode zum Parsen von URLs hat, die auf Browsern oder Servern funktionieren, ist ziemlich traurig ...
Skitterm

365
var getLocation = function(href) {
    var l = document.createElement("a");
    l.href = href;
    return l;
};
var l = getLocation("http://example.com/path");
console.debug(l.hostname)
>> "example.com"
console.debug(l.pathname)
>> "/path"

14
Sind Sie sicher, dass dies eine browserübergreifende Lösung ist?
Cllpse

70
Es sollte beachtet werden, dass dies zwar dem Originalposter helfen / antworten kann, diese Antwort jedoch nur für Personen funktioniert, die JS in einem Browser ausführen, da das DOM für seine Arbeit erforderlich ist.
Adam Batkin

4
Ein weiteres Beispiel für Einfachheit neben Einfallsreichtum.
Saeed Neamati

26
Funktioniert nicht im IE, wenn die href relativ ist. Der Hostname ist leer. Wenn Sie nur vollständige URLs angeben, funktioniert dies.
Derek Prior

7
Selbst mit absoluten URLs verhält sich IE (getestet in IE 11) anders als Chrome und Firefox. IE's pathnameentfernt den führenden Schrägstrich, während die anderen Browser dies nicht tun. So werden Sie am Ende mit /pathoder path, je nach Ihrem Browser.
TrueWill

299

hier zu finden: https://gist.github.com/jlong/2428561

var parser = document.createElement('a');
parser.href = "http://example.com:3000/pathname/?search=test#hash";

parser.protocol; // => "http:"
parser.host;     // => "example.com:3000"
parser.hostname; // => "example.com"
parser.port;     // => "3000"
parser.pathname; // => "/pathname/"
parser.hash;     // => "#hash"
parser.search;   // => "?search=test"
parser.origin;   // => "http://example.com:3000"

11
Beachten Sie, dass, wenn Sie nur die analysierten Teile des aktuellen Browser-Speicherorts abrufen möchten, die ersten beiden Zeilen werden parser = location;und alle folgenden Zeilen funktionieren. Versuchte es gerade in Chrome und IE9.
Lee Meador

9
Beachten Sie auch, dass pathnameder führende Schrägstrich im IE nicht enthalten ist. Stelle dir das vor. : D
nevelis

3
Verwenden Sie für IE "/" + parser.pathname
sbose

Warnung: Es wird zurückgegeben, http:auch wenn Sie nur domain.coman href übergeben (ohne Protokoll). Ich wollte dies verwenden, um zu überprüfen, ob das Protokoll fehlte, und wenn ja, könnte ich es hinzufügen, aber es geht davon aus, dass http: so nicht in der Lage war, es für diesen Zweck zu verwenden.
Max Hodges

Der Hostname enthält tatsächlich das Protokoll. Testen Sie die neueste Version von Chrome.
AndroidDev

109

Hier ist eine einfache Funktion, die einen regulären Ausdruck verwendet, der das aTag-Verhalten imitiert .

Vorteile

  • vorhersehbares Verhalten (keine browserübergreifenden Probleme)
  • braucht das DOM nicht
  • es ist wirklich kurz.

Nachteile

  • Der reguläre Ausdruck ist etwas schwer zu lesen

- -

function getLocation(href) {
    var match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)([\/]{0,1}[^?#]*)(\?[^#]*|)(#.*|)$/);
    return match && {
        href: href,
        protocol: match[1],
        host: match[2],
        hostname: match[3],
        port: match[4],
        pathname: match[5],
        search: match[6],
        hash: match[7]
    }
}

- -

getLocation("http://example.com/");
/*
{
    "protocol": "http:",
    "host": "example.com",
    "hostname": "example.com",
    "port": undefined,
    "pathname": "/"
    "search": "",
    "hash": "",
}
*/

getLocation("http://example.com:3000/pathname/?search=test#hash");
/*
{
    "protocol": "http:",
    "host": "example.com:3000",
    "hostname": "example.com",
    "port": "3000",
    "pathname": "/pathname/",
    "search": "?search=test",
    "hash": "#hash"
}
*/

BEARBEITEN:

Hier ist eine Aufschlüsselung des regulären Ausdrucks

var reURLInformation = new RegExp([
    '^(https?:)//', // protocol
    '(([^:/?#]*)(?::([0-9]+))?)', // host (hostname and port)
    '(/{0,1}[^?#]*)', // pathname
    '(\\?[^#]*|)', // search
    '(#.*|)$' // hash
].join(''));
var match = href.match(reURLInformation);

4
Funktioniert nicht mit relativen URLs. Haben Sie RFC-3986 bei der Erstellung des regulären Ausdrucks befolgt? > getLocation ("// example.com/"); null> getLocation ("/ pathname /? search"); null> getLocation ("/ pathname /"); null> getLocation ("relativ"); null
gregers

2
Ich mag, wie dies nicht das DOM verwendet, aber Gregers hat einen guten Punkt. Es wäre schön, wenn dies relative Pfade handhaben könnte. Es würde erforderlich sein, window.location (ein a-Element) zu verwenden, um die Lücken auszufüllen und Code hinzuzufügen. In diesem Fall würde die Methode scheinheilig werden. Wenn es keine Alternative gibt, sind Sie sich nicht sicher, wie dies perfekt gelöst werden kann.
Turbo

Der href-Schlüssel mit der ursprünglichen URL wurde hinzugefügt, um die Konsistenz dieses Rückgabeobjekts mit der dom-Implementierung zu gewährleisten.
Mattdlockyer

2
Wenn jemand relative URLs analysieren muss, ist hier der aktualisierte reguläre Ausdruck: / ^ (? :( https? \ :) \ / \ /)? (([^: \ /? #] *) (?: \: ([0 -9] +))?) ([\ /] {0,1} [^? #] *) (\? [^ #] * |) (#. * |) $ /
shlensky

75
var loc = window.location;  // => "http://example.com:3000/pathname/?search=test#hash"

gibt die aktuelleUrl zurück.

Wenn Sie Ihre eigene Zeichenfolge als URL übergeben möchten ( funktioniert in IE11 nicht ):

var loc = new URL("http://example.com:3000/pathname/?search=test#hash")

Dann können Sie es wie folgt analysieren:

loc.protocol; // => "http:"
loc.host;     // => "example.com:3000"
loc.hostname; // => "example.com"
loc.port;     // => "3000"
loc.pathname; // => "/pathname/"
loc.hash;     // => "#hash"
loc.search;   // => "?search=test"

60

Die Antwort von freddiefujiwara ist ziemlich gut, aber ich musste auch relative URLs in Internet Explorer unterstützen. Ich habe die folgende Lösung gefunden:

function getLocation(href) {
    var location = document.createElement("a");
    location.href = href;
    // IE doesn't populate all link properties when setting .href with a relative URL,
    // however .href will return an absolute URL which then can be used on itself
    // to populate these additional fields.
    if (location.host == "") {
      location.href = location.href;
    }
    return location;
};

Verwenden Sie es nun, um die erforderlichen Eigenschaften zu erhalten:

var a = getLocation('http://example.com/aa/bb/');
document.write(a.hostname);
document.write(a.pathname);

JSFiddle-Beispiel: http://jsfiddle.net/6AEAB/


4
Dies sollte die akzeptierte Antwort sein. Sehr clevere Verwendung der relativen bis absoluten URL-Behandlung. +1
L0j1k

Anscheinend nicht das erste Mal, dass ein JSFiddle-Link starb: stackoverflow.com/questions/25179964/…
Claus

3
Dies hat großartig funktioniert, aber ich hatte ein Update, von dem ich hoffe, dass es anderen helfen wird. Ich verwende dies, um den Ursprung einer postMessage-Anforderung zu überprüfen. Wenn der Port ein Standardport ist (80 oder 443), wird er nicht an den Pfad angehängt. Ich habe dies beim Erstellen meiner URL bedingt überprüft: var locationHost = (location.port !== '80' && location.port !== '443') ? location.host : location.hostname; var locationOrigin = location.protocol + '//' + locationHost;
Rhoster

2
Ich habe diesen Kommentar an anderer Stelle zu einer populäreren Variante dieser Lösung abgegeben, aber da dies meine Lieblingslösung war, wollte ich ihn hier wiederholen. In IE11 führt ein Benutzername in der href dazu, dass alle diese Eigenschaftslesevorgänge Sicherheitsfehler auslösen. Beispiel: " example.com " funktioniert einwandfrei. " Benutzername@www.example.com " oder " Benutzername: Passwort@www.example.com " versuchen jedoch, auf eine der anderen Eigenschaften des Ankerelements (Beispiel: Hash) zu verweisen, um fehlzuschlagen und einen abscheulichen Fehler auszulösen.
Clippy

17

js-uri (verfügbar in Google Code) verwendet eine Zeichenfolgen-URL und löst ein URI-Objekt daraus auf:

var some_uri = new URI("http://www.example.com/foo/bar");

alert(some_uri.authority); // www.example.com
alert(some_uri);           // http://www.example.com/foo/bar

var blah      = new URI("blah");
var blah_full = blah.resolve(some_uri);
alert(blah_full);         // http://www.example.com/foo/blah

Vielen Dank!!! aber ich möchte uri = new Location (" example.com/aa/bb" ) typeof (window.location) == typeof (uri)
freddiefujiwara

Da window.location eine Zeichenfolge ist, sehe ich nicht wirklich, wie dies möglich oder hilfreich wäre. Warum müssen die Typen übereinstimmen, wenn Sie problemlos von einem zum anderen konvertieren können?
Rex M

developer.mozilla.org/en/DOM/window.location ist eine sehr schöne API !! Ich hoffe also, String in window.location-Objekt konvertieren
freddiefujiwara

1
Durch das Festlegen von window.location wird der Browser so geändert, dass dies nicht geschieht.
Epascarello

1
Hmm das stimmt. window.location ist keine Zeichenfolge, kann jedoch aus einer Zeichenfolge zugewiesen werden. Ich bin mir nicht sicher, ob dies nachgeahmt werden kann. Ich habe versucht, den Prototyp des Standorts einem neuen Uri-Objekt zuzuweisen, aber das hat nicht funktioniert.
Rex M

12

Was ist mit einfachen regulären Ausdrücken?

url = "http://www.example.com/path/to/somwhere";
urlParts = /^(?:\w+\:\/\/)?([^\/]+)(.*)$/.exec(url);
hostname = urlParts[1]; // www.example.com
path = urlParts[2]; // /path/to/somwhere

Versuchen Sie, etwas Gültiges wie zu analysieren, //user:password@example.com/path/x?y=zund Sie werden sehen, warum ein einfacher regulärer Ausdruck es nicht schneidet. Werfen Sie jetzt etwas Ungültiges hinein und es sollte auch auf vorhersehbare Weise aussteigen.
Mikko Rantalainen

Einfacher Regex ist für einfache Probleme :) Aber es hört sich für mich nicht so an, als ob eine solche URL von Regex nicht analysiert werden kann. Sie würde nur ein paar weitere Anpassungen benötigen. Aber ich würde wahrscheinlich in eine Bibliothek gehen, wenn ich etwas komplexeres und kugelsicheres brauche.
Svestka

12

Heute bin ich auf dieses Problem gestoßen und habe Folgendes gefunden: URL - MDN-Web-APIs

var url = new URL("http://test.example.com/dir/subdir/file.html#hash");

Diese Rückkehr:

{ hash:"#hash", host:"test.example.com", hostname:"test.example.com", href:"http://test.example.com/dir/subdir/file.html#hash", origin:"http://test.example.com", password:"", pathname:"/dir/subdir/file.html", port:"", protocol:"http:", search: "", username: "" }

Ich hoffe, mein erster Beitrag hilft dir!


Doppelte Antwort
Martin van Driel

6
Ja, aber der Typ an der Spitze aktualisiert gerade sein awser im Jahr 2017, ich poste es im Jahr 2016.
A. Moynet

Ah mein schlechtes, sorry
Martin van Driel

9

Hier ist eine Version, die ich von https://gist.github.com/1847816 kopiert , aber neu geschrieben habe, damit sie leichter zu lesen und zu debuggen ist. Der Zweck des Kopierens der Ankerdaten in eine andere Variable mit dem Namen "Ergebnis" besteht darin, dass die Ankerdaten ziemlich lang sind. Wenn Sie also eine begrenzte Anzahl von Werten in das Ergebnis kopieren, wird das Ergebnis vereinfacht.

/**
 * See: https://gist.github.com/1847816
 * Parse a URI, returning an object similar to Location
 * Usage: var uri = parseUri("hello?search#hash")
 */
function parseUri(url) {

  var result = {};

  var anchor = document.createElement('a');
  anchor.href = url;

  var keys = 'protocol hostname host pathname port search hash href'.split(' ');
  for (var keyIndex in keys) {
    var currentKey = keys[keyIndex]; 
    result[currentKey] = anchor[currentKey];
  }

  result.toString = function() { return anchor.href; };
  result.requestUri = result.pathname + result.search;  
  return result;

}

6

Browserübergreifendes URL-Parsen umgeht das relative Pfadproblem für IE 6, 7, 8 und 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;
}

Verwendung ( Demo JSFiddle hier ):

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

Ergebnis:

{
    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"
}

5

Für diejenigen, die nach einer modernen Lösung suchen, die in IE, Firefox UND Chrome funktioniert:

Keine dieser Lösungen, die ein Hyperlink-Element verwenden, funktioniert in Chrome gleich. Wenn Sie eine ungültige (oder leere) URL an Chrome übergeben, wird immer der Host zurückgegeben, von dem aus das Skript aufgerufen wird. In IE werden Sie also leer, während Sie in Chrome localhost (oder was auch immer) erhalten.

Wenn Sie versuchen, den Überweiser anzusehen, ist dies trügerisch. Sie sollten sicherstellen, dass der Host, den Sie zurückerhalten, in der ursprünglichen URL enthalten ist, um dies zu beheben:

    function getHostNameFromUrl(url) {
        // <summary>Parses the domain/host from a given url.</summary>
        var a = document.createElement("a");
        a.href = url;

        // Handle chrome which will default to domain where script is called from if invalid
        return url.indexOf(a.hostname) != -1 ? a.hostname : '';
    }

Dies ist eine sehr wichtige Sache zu berücksichtigen!
2rs2ts

Dies bricht jedoch die relativen URLs vollständig!
Lakenen

4

Der AngularJS-Weg - Geige hier: http://jsfiddle.net/PT5BG/4/

<!DOCTYPE html>
<html>
<head>
    <title>Parse URL using AngularJS</title>
</head>
<body ng-app ng-controller="AppCtrl" ng-init="init()">

<h3>Parse URL using AngularJS</h3>

url: <input type="text" ng-model="url" value="" style="width:780px;">

<ul>
    <li>href = {{parser.href}}</li>
    <li>protocol = {{parser.protocol}}</li>
    <li>host = {{parser.host}}</li>
    <li>hostname = {{parser.hostname}}</li>
    <li>port = {{parser.port}}</li>
    <li>pathname = {{parser.pathname}}</li>
    <li>hash = {{parser.hash}}</li>
    <li>search = {{parser.search}}</li>
</ul>

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.6/angular.min.js"></script>

<script>
function AppCtrl($scope) {

    $scope.$watch('url', function() {
        $scope.parser.href = $scope.url;
    });

    $scope.init = function() {
        $scope.parser = document.createElement('a');
        $scope.url = window.location;
    }

}
</script>

</body>
</html>

2
Es wird eckiger sein, wenn Sie $documentund $windowDienstleistungen verwenden
Cherniv

3

Einfache und robuste Lösung mit dem Modulmuster. Dies beinhaltet einen Fix für IE, bei dem pathnameder nicht immer einen führenden Schrägstrich ( /) hat.

Ich habe einen Gist zusammen mit einer JSFiddle erstellt, die einen dynamischeren Parser bietet. Ich empfehle Ihnen, es auszuprobieren und Feedback zu geben.

var URLParser = (function (document) {
    var PROPS = 'protocol hostname host pathname port search hash href'.split(' ');
    var self = function (url) {
        this.aEl = document.createElement('a');
        this.parse(url);
    };
    self.prototype.parse = function (url) {
        this.aEl.href = url;
        if (this.aEl.host == "") {
           this.aEl.href = this.aEl.href;
        }
        PROPS.forEach(function (prop) {
            switch (prop) {
                case 'hash':
                    this[prop] = this.aEl[prop].substr(1);
                    break;
                default:
                    this[prop] = this.aEl[prop];
            }
        }, this);
        if (this.pathname.indexOf('/') !== 0) {
            this.pathname = '/' + this.pathname;
        }
        this.requestUri = this.pathname + this.search;
    };
    self.prototype.toObj = function () {
        var obj = {};
        PROPS.forEach(function (prop) {
            obj[prop] = this[prop];
        }, this);
        obj.requestUri = this.requestUri;
        return obj;
    };
    self.prototype.toString = function () {
        return this.href;
    };
    return self;
})(document);

Demo

Ausgabe

{
 "protocol": "https:",
 "hostname": "www.example.org",
 "host": "www.example.org:5887",
 "pathname": "/foo/bar",
 "port": "5887",
 "search": "?a=1&b=2",
 "hash": "section-1",
 "href": "https://www.example.org:5887/foo/bar?a=1&b=2#section-1",
 "requestUri": "/foo/bar?a=1&b=2"
}
{
 "protocol": "ftp:",
 "hostname": "www.files.com",
 "host": "www.files.com:22",
 "pathname": "/folder",
 "port": "22",
 "search": "?id=7",
 "hash": "",
 "href": "ftp://www.files.com:22/folder?id=7",
 "requestUri": "/folder?id=7"
}


3

Warum nicht benutzen?

        $scope.get_location=function(url_str){
        var parser = document.createElement('a');
        parser.href =url_str;//"http://example.com:3000/pathname/?search=test#hash";
        var info={
            protocol:parser.protocol,   
            hostname:parser.hostname, // => "example.com"
            port:parser.port,     // => "3000"
            pathname:parser.pathname, // => "/pathname/"
            search:parser.search,   // => "?search=test"
            hash:parser.hash,     // => "#hash"
            host:parser.host, // => "example.com:3000"      
        }
        return info;
    }
    alert( JSON.stringify( $scope.get_location("http://localhost:257/index.php/deploy/?asd=asd#asd"),null,4 ) );

3

Sie können auch die parse_url()Funktion aus dem Locutus- Projekt (ehemals php.js) verwenden.

Code:

parse_url('http://username:password@hostname/path?arg=value#anchor');

Ergebnis:

{
  scheme: 'http',
  host: 'hostname',
  user: 'username',
  pass: 'password',
  path: '/path',
  query: 'arg=value',
  fragment: 'anchor'
}

1
Diese URL hat bei mir nicht funktioniert, aber ich habe sie hier gefunden. github.com/hirak/phpjs/blob/master/functions/url/parse_url.js
Stan Quinn

@StanQuinn, das liegt daran, dass php.js seinen Namen in Locutus geändert hat. Ich habe meine Antwort mit einem neuen Link aktualisiert.
Andrey Rudenko

3
function parseUrl(url) {
    var m = url.match(/^(([^:\/?#]+:)?(?:\/\/((?:([^\/?#:]*):([^\/?#:]*)@)?([^\/?#:]*)(?::([^\/?#:]*))?)))?([^?#]*)(\?[^#]*)?(#.*)?$/),
        r = {
            hash: m[10] || "",                   // #asd
            host: m[3] || "",                    // localhost:257
            hostname: m[6] || "",                // localhost
            href: m[0] || "",                    // http://username:password@localhost:257/deploy/?asd=asd#asd
            origin: m[1] || "",                  // http://username:password@localhost:257
            pathname: m[8] || (m[1] ? "/" : ""), // /deploy/
            port: m[7] || "",                    // 257
            protocol: m[2] || "",                // http:
            search: m[9] || "",                  // ?asd=asd
            username: m[4] || "",                // username
            password: m[5] || ""                 // password
        };
    if (r.protocol.length == 2) {
        r.protocol = "file:///" + r.protocol.toUpperCase();
        r.origin = r.protocol + "//" + r.host;
    }
    r.href = r.origin + r.pathname + r.search + r.hash;
    return m && r;
};
parseUrl("http://username:password@localhost:257/deploy/?asd=asd#asd");

Es funktioniert sowohl mit absoluten als auch mit relativen URLs


abc://username:password@example.com:123/path/data?key=value&key2=value2#fragid1
茶树 和 葡萄 树

@ 山 茶树 和 葡萄 树 Ich habe den Code aktualisiert, um die Unterkomponente userinfo ordnungsgemäß zu behandeln. Vielen Dank für Ihren Kommentar, ich habe dieses Problem vorher nicht bemerkt
Nikolay

liebe diesen Regex
Kunal

2

Hör auf, das Rad neu zu erfinden. Verwenden Sie https://github.com/medialize/URI.js/

var uri = new URI("http://example.org:80/foo/hello.html");
// get host
uri.host(); // returns string "example.org:80"
// set host
uri.host("example.org:80");

5
Denn jedes Mal, wenn Sie ein Problem lösen möchten ... eine Bibliothek verwenden? Okay ... (nicht)
jiminikiz

4
Nicht immer (eigentlich fast nie), aber URLs sind sehr schwierig zu analysieren. Die RFCs enthalten viele, viele Details. Verwenden Sie besser eine Bibliothek, die von Tausenden verwendet und getestet wurde.
Hugo Sequeira

Wie wäre es, wenn Sie nur das verwenden, was eingebaut ist, anstatt dass jemand anderes das Rad mit einer Bibliothek neu erfindet? Sehen stackoverflow.com/a/24006120/747739
Phil

Es gibt keine IE11-Unterstützung für die integrierte Funktion, daher ist diese Bibliothek hervorragend. Zu sagen, niemals eine Bibliothek zu benutzen, ist wie zu sagen, wir hätten niemals jQuery verwenden und nur nativen Code schreiben sollen, was absolut lächerlich ist. Jeder Entwickler hat einen anderen Anwendungsfall, es gibt keinen "besten" Weg, manchmal funktioniert Vanille / Native am besten, manchmal nicht ... etwas, das 92% der Entwickler noch lernen müssen.
tno2007

1

Verwenden Sie einfach die Bibliothek url.js (für web und node.js).

https://github.com/websanova/js-url

url: http://example.com?param=test#param=again

url('?param'); // test
url('#param'); // again
url('protocol'); // http
url('port'); // 80
url('domain'); // example.com
url('tld'); // com

etc...

1

Ein einfacher Hack mit der ersten Antwort

var getLocation = function(href=window.location.href) {
    var l = document.createElement("a");
    l.href = href;
    return l;
};

Dies kann auch ohne Argument verwendet werden, um den aktuellen Hostnamen zu ermitteln. getLocation (). Hostname gibt den aktuellen Hostnamen an

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.