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 ()?


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)


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

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,"")

(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


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)

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.