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.

santo
sumber
2
kemungkinan duplikat Hapus kueri dari URL
Alex Angas

Jawaban:

348

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

tradyblix
sumber
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
383

Baca tentang Window.locationdan Locationantarmuka:

var url = [location.protocol, '//', location.host, location.pathname].join('');
Felix Kling
sumber
27
Atau jika menggunakan es6 Anda dapat menggunakan string literal ${location.protocol}//${location.host}${location.pathname}
alexreardon
Meskipun catatan yang pathnamedapat menjatuhkan terkemuka /(sampai IE 11?) . Ah, IE, selalu kepingan salju, bukan?
ruffin
36
location.toString().replace(location.search, "")
Quentin
sumber
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;
Jason
sumber
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]

pengguna1079877
sumber
5

Mencoba:

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

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

Alnitak
sumber
5

Berikut ini pendekatan menggunakan antarmuka URL () :

new URL(location.pathname, location.href).href
s4y
sumber
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]);
senang di bawah
sumber
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.

Andrew Faulkner
sumber
1

Gunakan properti dari window.location

var loc = window.location;
var withoutQuery = loc.hostname + loc.pathname;
var includingProtocol = loc.protocol + "//" + loc.hostname + loc.pathname;

Anda dapat melihat lebih banyak properti di https://developer.mozilla.org/en/DOM/window.location

detaylor
sumber
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>
TheVillageIdiot
sumber
1

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

LI XiangChen
sumber
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.

i Belajar Cerdas
sumber
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');
    });
});
i Belajar Cerdas
sumber