javascript窗口位置href没有哈希?


78

我有:

var uri = window.location.href;

这提供了 http://example.com/something#hash

没有整个路径的最佳和最简单的方法是#hash什么?

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

我尝试使用location.origin+location.pathname在所有浏览器中都无法使用的功能。我尝试使用location.protocol+'//'+location.host+location.pathname它对我来说似乎是一个糟糕的解决方案。

最好和最简单的方法是什么?也许我查询location.hash并尝试从uri substr()?


1
顺便说一句,如果您这样做只是为了链接到#section同一页面上的,只需将链接href设置为#section。您无需获取页面的基本url,然后在最后连接哈希值。
Web_Designer

Answers:


90

location.protocol+'//'+location.host+location.pathname 如果您不关心端口号或查询字符串,则为正确的语法

如果您确实在乎:

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

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

要么

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

你也可以做一个 location.href.replace(location.hash,"")

或者,创建一个URL对象

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


您在那里丢失了查询字符串(如果有)
Quentin

1
好像location.host包括端口。
2011年

14
最后一点.replace(location.hash,'')是辉煌的,而这正是我所追求的。

@GrigoryKalabin-应该仍然可以使用:var url = "http://example.com#example"; var lnk = document.createElement("a"); lnk.href=url; alert(lnk.hash);
mplungjan

8
location.href.replace(location.hash,“”)将无法正常工作,因为:example.com#example#会将“作为哈希”;example.com#example#a将给出'#a'作为哈希值;window.location.href.split('#')[0]是正确的解决方案。
ZPiDER

83
var uri = window.location.href.split("#")[0];

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

var hash = window.location.hash;

// Returns #hash

3
哈希符号不包含在该数组的第二部分中
Brian Leishman

我确实包括一个修复程序!:-)
Caverna's

3
这行不通。"foo#bar#baz".split("#") == "bar"
rgov

6
对于哈希,只需使用location.hash
Sumit

18
location.href.replace(location.hash,"")

(location+'').href.replace(location.hash,"")在Firefox中工作(位置不是常规字符串)
Taha Jahangir 2012年

但是要注意的location.hash是”当url是somehting.com/#时
Taha Jahangir

令我惊讶的是,如果location.hashURL中包含其他内容,则不会中断。例如,“ example.com/#example ”。因为location.hash包含前导“#”。如上文所指出的,除非哈希为空。
本杰


7

较短的解决方案:

  • 没有查询字符串和哈希 location.href.split(location.search||location.hash||/[?#]/)[0]

  • 只有没有哈希 location.href.split(location.hash||"#")[0]

(我通常使用第一个)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.