2013-10-01 21 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

您是对的,我错过了这个。现在应该是正确的... –

相关问题