Apakah ada metode untuk mendapatkan URL tanpa string kueri?


268

Saya punya URL suka http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

Saya ingin mendapatkan URL tanpa string query: http://localhost/dms/mduserSecurity/UIL/index.php.

Apakah ada metode untuk ini dalam JavaScript? Saat ini saya menggunakan document.location.href, tetapi mengembalikan URL lengkap.


2
kemungkinan duplikat Hapus kueri dari URL
Alex Angas

Jawaban:


348

Coba ini: window.location.href.split('?')[0]


12
@Lincoln - Kenapa? Saya tidak melihat alasan bahwa ini tidak aman. Ini juga dalam spesifikasi (baik spesifikasi untuk window.location.href apa yang harus dikembalikan dan spesifikasi untuk bagaimana URL bekerja) sehingga seharusnya tidak memiliki masalah di masa depan. Ini lebih mudah dibaca dan dipahami untuk kode yang lebih bersih. Lebih pendek untuk kode yang lebih kecil. Dan terakhir, ini tidak terlalu intens dan tidak terlalu rumit daripada jawaban Felix. Bukan mengatakan Felix salah, tetapi saya mengatakan bahwa tanpa semacam contoh spesifik kegagalan / rasa tidak aman bahwa jawaban ini lebih unggul dalam banyak hal.
Jimbo Jonny

1
Anda harus menggunakan window.location.pathname ..etc seperti pada jawaban lain
Muayyad Alsadi

22
@JimboJonny @Marcel Ini tidak menangani pengidentifikasi fragmen (misalnya #istilah dalam stackoverflow.com/questions/5817505#5817548 ). Anda harus menggunakan regex atau menggunakan beberapa fungsi .split (), saat itu Anda kehilangan nilai karena menjadi jawaban "sederhana" saat membersihkan URL. Memang ini secara teknis di luar cakupan pertanyaan, tetapi saya akan mengatakan itu masih relevan.
andrewb

2
Meskipun akurat bahwa ini tidak menangani pengidentifikasi fragmen, penanya tidak meminta URL yang benar-benar bersih. Dia meminta url secara khusus tanpa string kueri, dan jawaban ini memberikan itu. URL yang sama, dengan string kueri dihapus.
Drew Mayor


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

12
Ini adalah jawaban yang sangat undervalued. Hanya itu satu-satunya yang menjawab pertanyaan itu. Pilihan lebih pendek:location.href.replace(location.search, '')
Guido Bouman

2
bagaimana dengan ada bagian fragmen misal domain.com/?x=1#top
Onur Topal

2
Ada 10 jawaban untuk pertanyaan ini. Hanya satu dari mereka yang mempertahankan hash ( yang tidak ada pada URL yang ditanyakan oleh pertanyaan itu ). Mengapa ada dua komentar yang menunjukkan bahwa jawaban ini tidak mempertahankan hash yang tidak ada tetapi tidak ada yang lain?
Quentin

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

5
dipilih karena asal tidak didukung di IE11 :-(
George

6
Mengapa Anda tidak memilih sesuatu hanya karena tidak berfungsi di browser tertentu? Banyak tempat masih menggunakan IE10 sebagai standar karena aplikasi yang mereka gunakan.
Brad

1
Bekerja di IE11.309.16299.0
Ryan Burbidge

10

Jika Anda juga ingin menghapus hash, coba yang ini: window.location.href.split(/[?#]/)[0]


5

Mencoba:

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

(NB: .hostdaripada .hostnameagar port disertakan juga, jika perlu)



4

cukup potong string menggunakan split (cara mudah):

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

3

Untuk mendapatkan setiap bagian dari URL kecuali kueri:

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

Perhatikan bahwa ini termasuk hash juga, jika ada (saya sadar tidak ada hash di URL contoh Anda, tapi saya memasukkan aspek itu untuk kelengkapan). Untuk menghilangkan hash, cukup singkirkan .concat(location.hash).

Ini praktik yang lebih baik untuk digunakan concatuntuk menggabungkan string Javascript bersama (daripada +): dalam beberapa situasi menghindari masalah seperti jenis kebingungan.



1

Berikut adalah dua metode:

<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

Bagaimana dengan ini: location.href.slice(0, - ((location.search + location.hash).length))


0

Cukup tambahkan dua baris ini ke $ (dokumen). Sudah di JS sebagai berikut:

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

lebih baik menggunakan tanda dolar ($) (Akhiri dengan)

$('nav a[href$

alih-alih (^) (Mulai dengan)

$('nav a[href^

karena, jika Anda menggunakan tanda (^) dan Anda memiliki URL bersarang di menu navigasi, (mis. "/ akun" dan "/ akun / peran")

Ini akan mengaktifkan keduanya.


0

Jika Anda menggunakan dot net core 3.1, mendukung case abaikan rute, jadi cara sebelumnya tidak membantu jika kekalahan dalam huruf kecil dan pengguna menulis kekalahan dalam huruf kapital.

Jadi, kode berikut ini sangat membantu:

$(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');
    });
});
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.