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:
| Egendom | Resultat |
|---|---|
window.location.host | sub.domain.com:8080 eller sub.domain.com:80 |
window.location.hostname | sub.domain.com |
window.location.protocol | http: |
window.location.port | 8080 eller 80 |
window.location.pathname | /virtuellVäg |
window.location.origin | http://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
