Javascript Fenster Position href ohne Hash?

78

Ich habe:

var uri = window.location.href;

Das sieht vor http://example.com/something#hash

Was ist der beste und einfachste Weg, um den gesamten Weg ohne den zu bekommen #hash?

uri    = http://example.com/something#hash
nohash = http://example.com/something

Ich habe versucht, location.origin+location.pathnamewas nicht in jedem Browser funktioniert. Ich habe versucht, location.protocol+'//'+location.host+location.pathnameeine Lösung zu verwenden, die für mich wie eine beschissene Lösung aussieht.

Was ist der beste und einfachste Weg, dies zu tun? Vielleicht frage ich nach location.hash und versuche dies vom uri zu substr ()?

matt
quelle
1
Übrigens, wenn Sie dies nur tun, um #sectionauf dieselbe Seite zu verlinken , setzen Sie einfach den Link href auf #section. Sie müssen nicht die Basis-URL der Seite abrufen und dann den Hash am Ende verketten.
Web_Designer

Antworten:

90

location.protocol+'//'+location.host+location.pathname ist die richtige Syntax, wenn Sie sich nicht für Portnummer oder Querystring interessieren

Wenn es dich interessiert:

https://developer.mozilla.org/en/DOM/window.location

location.protocol+'//'+
  location.host+
  location.pathname+
 (location.search?location.search:"")

oder

location.protocol+'//'+
  location.hostname+
 (location.port?":"+location.port:"")+
  location.pathname+
 (location.search?location.search:"")

Sie können auch einfach eine machen location.href.replace(location.hash,"")

Alternativ können Sie ein URL-Objekt erstellen :

const url = new URL("https://www.somepage.com/page.hmtl#anchor") //(location.href);
console.log(url)
url.hash="";
console.log(url)

mplungjan
quelle
Sie haben die Abfragezeichenfolge (falls vorhanden) dort verloren
Quentin
1
Scheint, als ob location.host den Port einschließt.
Borgenk
14
Das letzte bisschen .replace(location.hash,'')ist brillant und genau das, wonach ich gesucht habe.
@GrigoryKalabin - sollte noch funktionieren:var url = "http://example.com#example"; var lnk = document.createElement("a"); lnk.href=url; alert(lnk.hash);
Mplungjan
8
location.href.replace (location.hash, "") funktioniert nicht richtig, weil: example.com # example # '' als Hash angibt; example.com # example # a gibt '#a' als Hash an; window.location.href.split ('#') [0] ist eine korrekte Lösung.
ZPiDER
83
var uri = window.location.href.split("#")[0];

// Returns http://example.com/something

var hash = window.location.hash;

// Returns #hash
Nick Brunt
quelle
3
Das Hash-Zeichen ist nicht im zweiten Teil dieses Arrays enthalten
Brian Leishman
Ich habe einen Fix hinzugefügt! :-)
Caverna
3
Das funktioniert nicht. "foo#bar#baz".split("#") == "bar"
Rgov
6
Für Hash verwenden Sie einfach location.hash.
Sumit
18
location.href.replace(location.hash,"")
QUentin
quelle
(location+'').href.replace(location.hash,"")funktioniert in Firefox (Ort ist keine reguläre Zeichenfolge)
Taha Jahangir
Aber kümmern Sie sich darum, dass location.hash'' wenn URL somehting.com/#
Taha Jahangir
Überraschenderweise wird dies nicht kaputt gehen, wenn location.hashes an anderer Stelle in der URL enthalten ist. Zum Beispiel " example.com/#example ". Weil location.hashdas führende "#" enthält. Außer wenn der Hash leer ist, wie oben ausgeführt.
Ben J
9

Ist der universelle Weg auch der kleinere?

location.href.split(/\?|#/)[0]
Alain Beauvois
quelle
7

Kürzere Lösungen:

  • ohne Abfragezeichenfolge und Hash location.href.split(location.search||location.hash||/[?#]/)[0]

  • nur ohne Hash location.href.split(location.hash||"#")[0]

(Ich benutze normalerweise den ersten)

Sebastien P.
quelle