クエリ文字列なしでURLを取得する方法はありますか?


268

のようなURLがありますhttp://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235

私は、クエリ文字列なしでURLを取得したいです:http://localhost/dms/mduserSecurity/UIL/index.php

JavaScriptでこれを行う方法はありますか?現在、私はを使用document.location.hrefしていますが、完全なURLを返します。


回答:


348

これを試して: window.location.href.split('?')[0]


12
@リンカーン-なぜ?これが安全ではない理由は私にはわかりません。また、仕様(window.location.hrefが返す必要のある仕様とURLがどのように機能するかの仕様の両方)にも含まれているため、今後問題が発生することはありません。読みやすく、コードがすっきりと理解しやすくなります。コードが小さいほど短くなります。そして最後に、それはフェリックスの答えよりも強度が低く、複雑ではありません。フェリックスは間違っていると言っているわけではありませんが、失敗/不安の特定の種類の例がなければ、この答えはほぼすべての点で優れていると言っています。
神保ジョニー

1
他の回答と同様に、window.location.pathname ..etcを使用する必要があります
Muayyad Alsadi 2013

22
@JimboJonny @Marcelこれはフラグメント識別子を処理しません(例:stackoverflow.com/questions/5817505#5817548#用語)。正規表現を使用するか、複数の.split()関数を使用する必要があります。この時点で、URLをクレンジングする際の「単純な」答えであるこの値を失いました。これは技術的には質問の範囲を超えていますが、関連性はあると思います。
andrewb 2013

2
これがフラグメント識別子を処理しないことは正確ですが、質問者は完全にサニタイズされたURLを要求しませんでした。彼は特にクエリ文字列のないURLを要求しましたが、この回答はそれを正確に提供します。クエリ文字列を削除した同じURL。
ドリューメジャー

383

Window.locationLocationインターフェースについて読む:

var url = [location.protocol, '//', location.host, location.pathname].join('');

27
または、es6を使用する場合は、文字列リテラルを使用できます ${location.protocol}//${location.host}${location.pathname}
alexreardon

ただし、先頭が(IE 11まで)低下するpathname可能性があることに注意してください。あ、IE、いつもスノーフレークですよね?/
ルフィン

36
location.toString().replace(location.search, "")

12
これは非常に過小評価されている答えです。質問に正確に答えるのはそれだけです。さらに短いオプション:location.href.replace(location.search, '')
グイドブーマン

2
たとえば、domain.com /
x

2
この質問には10の回答があります。それらの1つだけがハッシュを保持します(とにかく質問のURLに存在しません)。この回答では存在しないハッシュは保持されず、その他のハッシュは保持されないことを指摘する2つのコメントがあるのはなぜですか?
クエンティン

14
var url = window.location.origin + window.location.pathname;

5
IE11ではオリジンがサポートされていないため、反対票が投じられました:-(
George

6
特定のブラウザで機能しないという理由だけで、なぜ反対票を投じるのですか?多くの場所で、IE10を使用しているため、標準としてIE10を使用しています。
ブラッド

1
IE11.309.16299.0で動作
Ryan Burbidge

10

ハッシュも削除したい場合は、これを試してください: window.location.href.split(/[?#]/)[0]


5

試してください:

document.location.protocol + '//' +
document.location.host +
document.location.pathname;

(NB:.hostというよりも.hostname、必要に応じてポートが、あまりにも含まれますように)



4

スプリットを使用して文字列をカットするだけです(簡単な方法):

var myString = "http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235"
var mySplitResult = myString.split("?");
alert(mySplitResult[0]);

3

クエリを除くURLのすべての部分を取得するには:

var url = (location.origin).concat(location.pathname).concat(location.hash);

ハッシュがある場合は、これにもハッシュが含まれることに注意してください(例のURLにはハッシュがないことは承知していますが、完全性のためにそのアスペクトを含めました)。ハッシュを削除するには、単に除外し.concat(location.hash)ます。

を使用concatするよりも、JavaScript文字列を結合するのに使用することをお勧めします+。状況によっては、型の混乱などの問題を回避できます。



1

2つの方法は次のとおりです。

<script type="text/javascript">
    var s="http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu
                                =true&pcode=1235";

    var st=s.substring(0, s.indexOf("?"));

    alert(st);

    alert(s.replace(/\?.*/,''));
</script>

1

これはどう: location.href.slice(0, - ((location.search + location.hash).length))


0

次のように、JSでこれらの2行を$(document).readyに追加します。

$(document).ready(function () {
 $("div.sidebar nav a").removeClass("active");
        $('nav a[href$="'+ window.location.pathname.split("?")[0] +'"]').addClass('active');
});

ドル記号($)を使用することをお勧めします(次で終わる)

$('nav a[href$

代わりに(^)(で始まる)

$('nav a[href^

(^)記号を使用し、ナビゲーションメニューにネストされたURLがある場合(例: "/ account"と "/ account / roles")

それらの両方をアクティブにします。


0

ドットネットコア3.1を使用している場合は、ルート無視がサポートされているため、ルートが小文字で、ユーザーがルートを大文字で記述している場合、前の方法は役に立ちません。

したがって、次のコードは非常に役立ちます。

$(document).ready(function () {
    $("div.sidebar nav a").removeClass("active");
    var urlPath = window.location.pathname.split("?")[0];
    var nav = $('div.sidebar nav a').filter(function () {
        return $(this).attr('href').toLowerCase().indexOf(urlPath.toLocaleLowerCase()) > -1;
    });
    $(nav).each(function () {
        if ($(this).attr("href").toLowerCase() == urlPath.toLocaleLowerCase())
            $(this).addClass('active');
    });
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.