2012-03-01 30 views
24

我正在尋找一種以Javascript方式獲取當前文檔URL的整潔方式。不帶參數的當前URL,哈希值,http(s)://

  • URL應該是乾淨的參數(?參數1 = BLA &參數2 = BLA)
  • 的URL應該是乾淨
  • HTTP/HTTPS應被刪除/合併到散列標籤(#jumppoint)的http

我知道我可以通過location.href得到當前的URL,然後使用一些正則表達式來清理它,但也許有更好的/更乾淨的解決方案來擺脫垃圾?

+0

我很想只是downvote調用的URL 「垃圾」 的重要組成部分! – Douglas 2012-03-01 09:39:32

+0

@Douglas重要性是主觀的。在這個功能的背景下,只有主持人才是相關部分,這是完全合理的。 – 2012-03-01 09:40:38

+0

ptorocol可以是ftp:以及你需要考慮它嗎? – kirilloid 2012-03-01 09:47:46

回答

46

除以外,window.location還有許多其他參數。查看全部參考這裏:https://developer.mozilla.org/en/DOM/window.location

什麼你正在尋找作爲首發可能是window.location.hostname

「主機名(不包括端口號或方括號 )。」

從示例URL http://[www.example.com]:80/search?q=devmo#test的主機名將是www.example.com

如果您還希望包括路徑和強制HTTP://協議,嘗試:

'http://' + window.location.hostname + window.location.pathname; 

作爲一個方面說明,一個漂亮的伎倆從另一個URL比窗口得到相同的參數。位置是創建一個空的錨:

var a = document.createElement('a'); 
a.href = 'http://www.example.com:80/search?q=devmo#test'; 

console.log('http://' + a.hostname + a.pathname); 
+1

我想他們也想要路徑名。 – jfriend00 2012-03-01 09:46:33

+0

@ jfriend00是的,文檔應該足以解決問題,但爲了清晰起見,我也添加了這些內容。 – David 2012-03-01 09:49:09

+1

''http://'window.location.hostname + window.location.pathname;' 您忘記了端口 – Alex 2013-12-15 09:23:12

0

This頁面表明你很可能window.location.host讓你在我還沒有測試它真正感興趣的部分,雖然。

+8

然後測試它... – Konerak 2012-03-01 09:43:37

2

你有document.location對象,所以:

var oLoc = document.location, 
    sUrl = oLoc.protocol + oLoc.hostname; 
    // or "http://" + oLoc.hostname 
0

嘗試:

 

window.location.hostname; 
 
1

您可以使用這些替代函數刪除散列和搜索參數和規範HTTPS訪問http:

url = url.replace(/#[^#]*$/, "").replace(/\?[^\?]*$/, "").replace(/^https:/, "http:"); 

或者,如果你真的想要的是域和路徑,你可以使用這個:

window.location.hostname + window.location.pathname 
27

沒有解決的事實,協議可以是HTTP或HTTPS作爲OP的稱號。爲了適應這種情況,我建議:

document.location.protocol +"//"+ document.location.hostname + document.location.pathname 
+1

「http/https應該被移除/整合到http」中... – David 2014-10-01 21:27:16

+0

如果您的URL中有端口號,則此解決方案會導致端口號丟失,即http:// localhost:49346 /變爲http:// localhost。 – Kris 2016-10-24 15:39:50

2

請試試這個片斷:

if (!window.location.origin){ 
 
    // For IE 
 
    window.location.origin = window.location.protocol + "//" + (window.location.port ? ':' + window.location.port : '');  
 
} 
 

 
url = window.location.origin + window.location.pathname; 
 
document.write('Origin url: ' + url);

+0

很久以前,這已經得到了回答。這個問題的答案是錯誤的,因爲如果頁面是https,它仍然會提供https://作爲原始協議 - 但是它應該剝離協議/將其讀爲http。 – bardiir 2015-01-22 11:21:23

+0

for-IE代碼中是否缺少主機名?像 'window.location.origin = window.location.protocol +「//」+(window.location.port?':'+ window.location.port:'') +'/'+ window.location。 hostname;' – Alex 2016-01-18 15:03:15

+0

是的,但不是按照以下順序:window.location.origin = window.location.protocol +「//」+ window.location.hostname +(window.location.port?':'+ window.location。港口 : ''); – Zzirconium 2017-03-16 14:17:45