2013-10-01 23 views
1

什麼是讓域部分後的「什麼」部分的最佳方式,使用Javascript:如何得到任何下列URL中的域名,使用Javascript

http://www.domain.com/anything 
http://www.domain.com/#anything 
http://www.domain.com/any/thing 

對於http://www.domain.com/#anything我將不得不使用window.location.hash。但對於http://www.domain.com/anything我將不得不使用window.location.pathname

我使用:

window.location.href.replace(window.location.origin, "").slice(1) 

是否有此解決方案什麼注意事項?有沒有更好的辦法?

回答

4

注意事項:
location.origin不支持IE。
其他改進:.slice實際上是調用Array.prototype.slice。一個需要原型查找的方法調用肯定會比直接訪問你需要的元素要慢,特別是在你的情況下,slice方法只返回一個只有1個元素的數組。所以:

你可以使用location.pathname,但厭倦:標準寫着:

路徑
該屬性表示該主機和端口可達之後包括一切的位置的URI的路徑組件不包括第一個問號(?)或散列標記(#)。

,但我認爲得到你想要的最簡單,最X瀏覽器的方式實際上是簡單地做這樣的:

var queryString = location.href.split(location.host)[1]; 
//optionally removing the leading `/` 
var queryString = location.href.split(location.host)[1].replace(/^\//,''); 

這是非常相似的,你現在有什麼,除了事實,我我沒有使用location.origin,其中,as shown on MDN不支持MS的IE ...
另一個好處是,我不打電話Array.prototype.slice,它返回一個數組,並且需要原型查找,這也稍微慢一些。 ..

3

window.location.pathname + window.location.search + window.location.hash

我認爲這是一個更好一點。你不必在這裏使用任何功能...

+0

不會得到'頁面? some = params' <==忽略'?'後的任何內容 –

+0

以'http://youtube.com/watch?v = 1234'爲例,您的代碼將返回'watch'作爲路徑名... –

+0

您是對的,我錯過了這個。現在應該是正確的... –

相關問題