回答:
次のアドレスのページがあるとします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
は明確ではありません。私はそれをクロムでチェックしましたhttp://sub.domain.com:port
がhttp://sub.domain.com
、ポートが80以外の場合、およびポートが80の場合に返されました。
@torazaburoに触れてくれてありがとう。
ロケーションプロトコルとホストを連結できます。
var root = location.protocol + '//' + location.host;
URLの場合、たとえば、次'http://stackoverflow.com/questions'
を返します'http://stackoverflow.com'
現在のページのURLだけでなく、任意のURLを操作できるようにしたかったため、受け入れられた回答は私にとってはうまくいきませんでした。
URL
オブジェクトを見てみましょう:
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"
2つの方法があります。最初はここで別の答えの変形ですが、これはデフォルト以外のポートを占めています:
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");
}
使用する
window.location.origin
そして: " http://aaa.bbb.ccc.ddd.com/sadf.aspx?blah "
あなたは得るでしょう:http : //aaa.bbb.ccc.ddd.com/
StackOverflowレスポンスで見たことのない別のハッキングがあります。画像の「src」属性を使用すると、サイトの完全なベースパスが生成されます。例えば :
var dummy = new Image;
dummy.src = '$'; // using '' will fail on some browsers
var root = dummy.src.slice(0,-1); // remove trailing '$'
のようなURL 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;
ただし、すべてのブラウザでテストしたわけではありません。
これをチェックして:
alert(window.location.hostname);
これはホスト名を次のように返します www.domain.com
そして:
window.location.host
のようなポートを持つドメイン名を返します www.example.com:80
完全なリファレンスについては、Mozilla開発者サイトを確認してください。
これは少し遅れていることはわかっていますが、ES6構文を少し使って、きれいな関数を作成しました
function getHost(href){
return Object.assign(document.createElement('a'), { href }).host;
}
ES5のように書くこともできます
function getHost(href){
return Object.assign(document.createElement('a'), { href: href }).host;
}
もちろんIEはをサポートしObject.assign
ていませんが、私の仕事ではそれは問題ではありません。
正規表現は、より多くの柔軟性を提供します。
//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