Hur man extraherar värdnamnsdelen av en URL i JavaScript


Finns det ett riktigt enkelt sätt att börja från en fullständig URL:

document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"

Och extrahera endast värddelen:

aaa.bbb.ccc.com

Det måste finnas en JavaScript-funktion som gör detta på ett pålitligt sätt, men jag kan inte hitta den.

Svar #1

Anta att du har en sida med denna adress: http://sub.domain.com/virtualPath/page.htm.

Använd följande i sidkoden för att uppnå dessa resultat:

EgendomResultat
window.location.hostsub.domain.com:8080 eller sub.domain.com:80
window.location.hostnamesub.domain.com
window.location.protocolhttp:
window.location.port8080 eller 80
window.location.pathname/virtuellVäg
window.location.originhttp://sub.domain.com (Kan också inkludera :port*****)

Uppdatering: om .origin

***** Som domaren säger, är webbläsarkompatibiliteten för window.location.origin inte tydlig. Jag har kontrollerat det i Chrome och det returnerade http://sub.domain.com:port om porten är något annat än 80, och http://sub.domain.com om porten är 80.

Speciellt tack till @torazaburo för att ha nämnt det för mig.

Svar #2

Du kan sammanfoga platsprotokollet och värden:

var root = location.protocol + '//' + location.host;

För en URL, låt oss säga 'http://stackoverflow.com/questions', kommer det att returnera 'http://stackoverflow.com'

Svar #3

Det accepterade svaret fungerade inte för mig eftersom jag ville kunna arbeta med vilken godtycklig URL som helst, inte bara den aktuella sidans URL.

Ta en titt på URL-objektet:

var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah");
url.protocol;  // "http:"
url.hostname;  // "aaa.bbb.ccc.com"
url.pathname;  // "/asdf/asdf/sadf.aspx"
url.search;    // "?blah"

Svar #4

Använd document.location-objektet och dess host eller hostname-egenskaper.

alert(document.location.hostname); // alerts "stackoverflow.com"

Svar #5

Det finns två sätt. Det första är en variant av ett annat svar här, men detta tar hänsyn till icke-standardportar:

function getRootUrl() {
  var defaultPorts = {"http:":80,"https:":443};

  return window.location.protocol + "//" + window.location.hostname
   + (((window.location.port)
    && (window.location.port != defaultPorts[window.location.protocol]))
    ? (":"+window.location.port) : "");
}

Men jag föredrar denna enklare metod (som fungerar med vilken URI-sträng som helst):

function getRootUrl(url) {
  return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}

Svar #6

Låt oss anta att du har denna URL-väg:

http://localhost:4200/landing?query=1#2

Så, du kan servera dig själv efter platsvärdena, enligt följande:

window.location.hash: "#2"

window.location.host: "localhost:4200"

window.location.hostname: "localhost"

window.location.href: "http://localhost:4200/landing?query=1#2"

window.location.origin: "http://localhost:4200"

window.location.pathname: "/landing"

window.location.port: "4200"

window.location.protocol: "http:"

window.location.search: "?query=1"

Nu kan vi dra slutsatsen att du letar efter:

window.location.hostname

Relaterade artiklar