URL'yi sorgu dizesi olmadan almanın herhangi bir yöntemi var mı?


268

Gibi bir URL'm var http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

Ben sorgu dizesi olmadan URL almak istiyorum: http://localhost/dms/mduserSecurity/UIL/index.php.

JavaScript'te bunun için herhangi bir yöntem var mı? Şu anda kullanıyorum document.location.href, ancak tam URL'yi döndürüyor.


Yanıtlar:


348

Bunu dene: window.location.href.split('?')[0]


12
@Lincoln - Neden? Bunun güvensiz olması için hiçbir neden göremiyorum. Ayrıca spesifikasyonlar içinde (hem window.location.href'in ne dönmesi gerektiğine dair özellikler hem de URL'nin nasıl çalıştığına ilişkin özellikler) içerdiğinden, gelecekteki herhangi bir sorun yaşamamalıdır. Daha temiz kod için daha kolay okunur ve anlaşılır. Daha küçük kodlar için daha kısadır. Ve son olarak Felix'in cevabından daha az yoğun ve daha az karmaşık. Felix'in yanlış olduğunu söylememek, ancak belirli bir başarısızlık / güvensizlik örneği olmadan bu cevabın hemen hemen her açıdan üstün olduğunu söylüyorum.
Jimbo Jonny

1
diğer cevaplarda olduğu gibi window.location.pathname
..etc kullanmalısınız

22
@JimboJonny @Marcel Parça tanımlayıcılarını işlemez (örn #. Stackoverflow.com/questions/5817505#5817548 içindeki terim ). Normal ifade kullanmanız veya birden çok .split () işlevi kullanmanız gerekir; bu noktada, URL'yi temizlerken "basit" bir yanıt olmanın değerini kaybettiniz. Bu teknik olarak sorunun kapsamı dışındadır, ancak yine de alakalı olduğunu söyleyebilirim.
andrewb

2
Bunun parça tanımlayıcılarını işlemediği doğru olsa da, asker tamamen sterilize edilmiş bir URL istemedi. Özellikle sorgu dizesi olmayan bir URL istedi ve bu cevap tam olarak bunu sunuyor. Sorgu dizesi kaldırıldığında aynı URL.
Drew Major


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

12
Bu çok değersiz bir cevap. Soruyu tam olarak cevaplayan tek kişi bu. Daha da kısa seçenek:location.href.replace(location.search, '')
Guido Bouman

2
fragman kısmı var mesela domain.com/?x=1#top
Onur Topal

2
Bu soruya 10 cevap var. Bunlardan sadece bir tanesi karmayı korur ( bu, sorunun zaten sorduğu URL'de yoktur ). Neden bu cevabın var olmayan karmayı korumadığını ancak diğerlerinin hiçbirini korumadığını gösteren iki yorum var?
Quentin

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

5
köken :-( IE11 içinde desteklenmediği için aşağı olarak
George

6
Neden belirli bir tarayıcıda çalışmadığı için bir şeye karşı oy veresiniz ki? Birçok yer, kullandıkları uygulamalar nedeniyle hala standart olarak IE10 kullanıyor.
Brad

1
IE'de çalışıyor11.309.16299.0
Ryan Burbidge

10

Ayrıca karma değerini kaldırmak istiyorsanız, şunu deneyin: window.location.href.split(/[?#]/)[0]


5

Deneyin:

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

(Not: .hostyerine .hostnameportu da gerekirse dahil olur ve böylece)



4

sadece dizeyi split kullanarak kesin (kolay yol):

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

3

Sorgu hariç URL'nin her bölümünü almak için:

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

Eğer varsa, bu karma da içerir unutmayın (Örnek URL'nizde karma yok farkındayım, ancak tamlık için bu yönü dahil ettim). Hash'i ortadan kaldırmak için hariç tutmanız yeterlidir .concat(location.hash).

concatJavascript dizelerini birleştirmek (daha çok +) yerine kullanmak daha iyi bir uygulamadır : bazı durumlarda tür karışıklığı gibi sorunlardan kaçınır.



1

İşte iki yöntem:

<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

Buna ne dersin: location.href.slice(0, - ((location.search + location.hash).length))


0

Bu iki satırı $ (document) 'a ekleyin. JS'de zaten aşağıdaki gibi:

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

dolar işareti ($) kullanmak daha iyidir

$('nav a[href$

(^) yerine (Şununla başla)

$('nav a[href^

çünkü, (^) işaretini kullanıyorsanız ve gezinme menüsünde yuvalanmış URL'leriniz varsa, (örneğin "/ hesap" ve "/ hesap / roller")

İkisini de aktif edecek.


0

Dot net core 3.1 kullanıyorsanız, durum yoksayma yolunu destekliyor , bu nedenle rutin küçük harflerle yazılmışsa ve kullanıcı routu büyük harflerle yazıyorsa önceki yol yardımcı olmaz.

Bu nedenle, aşağıdaki kod çok yararlıdır:

$(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');
    });
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.