是否有一种非常简单的方法可以从完整的网址开始:
document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah"
仅提取主持人部分:
aaa.bbb.ccc.com
必须有一个JavaScript函数才能可靠地执行此操作,但我找不到它。
答案 0 :(得分:753)
假设您有一个包含此地址的页面:http://sub.domain.com/virtualPath/page.htm
。在页面代码中使用以下内容来获得这些结果:
window.location.host
:您将获得sub.domain.com:8080
或sub.domain.com:80
window.location.hostname
:您将获得sub.domain.com
window.location.protocol
:您将获得http:
window.location.port
:您将获得8080
或80
window.location.pathname
:您将获得/virtualPath
window.location.origin
:你会得到http://sub.domain.com
***** 更新:关于.origin
*****正如ref所述,window.location.origin
的浏览器兼容性尚不清楚。我已经在chrome中检查了它,如果端口不是80,则返回http://sub.domain.com:port
,如果端口是80,则返回http://sub.domain.com
。
特别感谢@torazaburo向我提及。
答案 1 :(得分:144)
您可以连接位置协议和主机:
var root = location.protocol + '//' + location.host;
对于网址,请说'http://stackoverflow.com/questions'
,它将返回'http://stackoverflow.com'
答案 2 :(得分:35)
使用document.location
对象及其host
或hostname
属性。
alert(document.location.hostname); // alerts "stackoverflow.com"
答案 3 :(得分:20)
有两种方法。第一个是这里的另一个答案的变体,但是这个解释了非默认端口:
function getRootUrl() {
var defaultPorts = {"http:":80,"https:":443};
return window.location.protocol + "//" + window.location.hostname
+ (((window.location.port)
&& (window.location.port != defaultPorts[window.location.protocol]))
? (":"+window.location.port) : "");
}
但我更喜欢这个更简单的方法(适用于任何URI字符串):
function getRootUrl(url) {
return url.toString().replace(/^(.*\/\/[^\/?#]*).*$/,"$1");
}
答案 4 :(得分:14)
接受的答案对我不起作用,因为希望能够处理任何仲裁URL,而不仅仅是当前的页面URL。
查看URL
object:
var url = new URL("http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah");
url.protocol; // "http:"
url.hostname; // "aaa.bbb.ccc.com"
url.pathname; // "/asdf/asdf/sadf.aspx"
url.search; // "?blah"
答案 5 :(得分:7)
答案 6 :(得分:6)
尝试
document.location.host
或
document.location.hostname
答案 7 :(得分:3)
我使用的是另一个hack,并且从未在任何StackOverflow响应中看到过: 使用图像的“src”属性将生成您网站的完整基本路径。 例如:
var dummy = new Image;
dummy.src = '$'; // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'
在http://domain.com/somesite/index.html
之类的网址上,
root
将设置为http://domain.com/somesite/
。
这也适用于localhost或任何有效的基本URL。
请注意,这会导致$
虚拟映像上的HTTP请求失败。
您可以使用现有图像来避免这种情况,只需稍微更改代码即可。
另一种变体使用虚拟链接,对HTTP请求没有副作用:
var dummy = document.createElement ('a');
dummy.href = '';
var root = dummy.href;
但我没有在每个浏览器上测试它。
答案 8 :(得分:2)
检查一下:
alert(window.location.hostname);
这会将主机名返回为www.domain.com
和
window.location.host
将返回包含www.example.com:80
有关完整参考检查Mozilla developer网站。
答案 9 :(得分:2)
我想说明一些事情。如果有人想要使用我需要的路径获取整个网址,可以使用:
var fullUrl = window.location.protocol + "//" + window.location.hostname + window.location.pathname;
答案 10 :(得分:2)
我知道这有点晚了,但我用一点ES6语法做了一个干净的小功能
function getHost(href){
return Object.assign(document.createElement('a'), { href: href }).host;
}
它也可以在ES5中编写,如
Object.assign
当然IE不支持{{1}},但在我的工作中,这并不重要。
答案 11 :(得分:0)
Regex提供了更多的灵活性。
//document.location.href = "http://aaa.bbb.ccc.com/asdf/asdf/sadf.aspx?blah
//1.
var r = new RegExp(/http:\/\/[^/]+/);
var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com
//2.
var r = new RegExp(/http:\/\/[^/]+\/[^/]+/);
var match = r.exec(document.location.href) //gives http://aaa.bbb.ccc.com/asdf
答案 12 :(得分:0)
我的解决方案可在包括Microsoft Internet Explorer在内的所有Web浏览器中使用,并且不使用任何正则表达式,它的灵感来自于Noah Cardoza和Martin Konecny解决方案:
function getHostname(href) {
if (typeof URL === 'object') {
// workaround for MS IE 11 (Noah Cardoza's solution but without using Object.assign())
var dummyNode = document.createElement('a');
dummyNode.href = href;
return dummyNode.hostname;
} else {
// Martin Konecny's solution
return new URL(href).hostname;
}
}