web-dev-qa-db-ja.com

JavaScript-URLパスの一部を取得

JavaScriptを使用してURLからパスだけを引き出す正しい方法は何ですか?

例:
URLがあります
http://www.somedomain.com/account/search?filter=a#top
しかし、私はこの部分を取得したいだけです
/ account/search

活用できるものがあれば、jQueryを使用しています。

149
BuddyJoe

現在のウィンドウにそれを提供する組み込みの window.location オブジェクトのプロパティがあります。

// If URL is http://www.somedomain.com/account/search?filter=a#top

window.location.pathname // /account/search

// For reference:

window.location.Host     // www.somedomain.com (includes port if there is one)
window.location.hostname // www.somedomain.com
window.location.hash     // #top
window.location.href     // http://www.somedomain.com/account/search?filter=a#top
window.location.port     // (empty string)
window.location.protocol // http:
window.location.search   // ?filter=a  



更新し、すべてのURLに同じプロパティを使用します。

このスキーマは URLUtils と呼ばれるインターフェースとして標準化されていることがわかりました。既存のwindow.locationオブジェクトとアンカー要素の両方がインターフェースを実装します。

したがって、anyURLに対して上記と同じプロパティを使用できます— URLでアンカーを作成し、プロパティにアクセスします。

var el = document.createElement('a');
el.href = "http://www.somedomain.com/account/search?filter=a#top";

el.Host        // www.somedomain.com (includes port if there is one[1])
el.hostname    // www.somedomain.com
el.hash        // #top
el.href        // http://www.somedomain.com/account/search?filter=a#top
el.pathname    // /account/search
el.port        // (port if there is one[1])
el.protocol    // http:
el.search      // ?filter=a

[1]:ポートを含むプロパティのブラウザサポートは一貫性がありません。参照: http://jessepollak.me/chrome- was-wrong-ie-was-right

これは、ChromeおよびFirefoxの最新バージョンで動作します。テストするInternet Explorerのバージョンはありませんので、JSFiddleの例を試してください。

JSFiddleの例

また、アンカー要素なしで、URL自体のサポートを提供する URL オブジェクトがあります。現時点では、安定したブラウザはサポートしていないようですが、Firefox 26で提供されると言われています。 サポートが必要な場合は、こちらで試してみてください

369
Nicole
window.location.href.split('/');

すべてのURL部分を含む配列を提供します。これには通常の配列のようにアクセスできます。

または、@ Dylanによって提案された、パス部分のみの、よりエレガントなソリューション:

window.location.pathname.split('/');
44
Jose Faeti

これがcurrent urlの場合window.location.pathnameを使用し、それ以外の場合はこの正規表現を使用します。

var reg = /.+?\:\/\/.+?(\/.+?)(?:#|\?|$)/;
var pathname = reg.exec( 'http://www.somedomain.com/account/search?filter=a#top' )[1];
27
nobody