Czy istnieje metoda uzyskania adresu URL bez ciągu zapytania?


267

Mam adres URL podobny do http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

Chcę uzyskać adres URL bez ciągu zapytania: http://localhost/dms/mduserSecurity/UIL/index.php .

Czy jest jakaś metoda na to w JavaScript? Obecnie używam document.location.href, ale zwraca pełny adres URL.


Odpowiedzi:


348

Spróbuj tego: window.location.href.split('?')[0]


12
@Lincoln - Dlaczego? Nie widzę powodu, dla którego byłoby to niebezpieczne. Jest również w ramach specyfikacji (zarówno specyfikacji dla tego, jakie okno.location.href powinno zwrócić, a specyfikacji specyfikacji działania adresu URL), więc nie powinno mieć żadnych problemów w przyszłości. Jest łatwiejszy do odczytania i zrozumienia dla czystszego kodu. Jest krótszy dla mniejszego kodu. I na koniec jest mniej intensywny i mniej skomplikowany niż odpowiedź Felixa. Nie twierdzenie, że Felix jest w błędzie, ale mówię, że bez jakiegoś konkretnego przykładu porażki / niepewności ta odpowiedź jest lepsza pod każdym względem.
Jimbo Jonny

1
powinieneś użyć window.location.pathname ..etc jak w innych odpowiedziach
Muayyad Alsadi

22
@JimboJonny @Marcel Nie obsługuje identyfikatorów fragmentów (np. #Termin w stackoverflow.com/questions/5817505#5817548 ). Będziesz musiał użyć wyrażenia regularnego lub wielu funkcji .split (), w którym to momencie straciłeś wartość, ponieważ jest to „prosta” odpowiedź przy czyszczeniu adresu URL. To prawda, że ​​z technicznego punktu widzenia jest to poza zakresem pytania, ale powiedziałbym, że jest nadal aktualne.
andrewb

2
Chociaż jest prawdą, że nie obsługuje identyfikatorów fragmentów, pytający nie poprosił o całkowicie zdezynfekowany adres URL. Poprosił konkretnie o adres URL bez ciągu zapytania, a ta odpowiedź zapewnia dokładnie to. Ten sam adres URL, z usuniętym ciągiem zapytania.
Drew Major


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

11
To bardzo niedoceniana odpowiedź. To jedyny, który dokładnie odpowiada na pytanie. Jeszcze krótsza opcja:location.href.replace(location.search, '')
Guido Bouman

2
co powiesz na fragment, np. domain.com/?x=1#top
Onur Topal

2
Istnieje 10 odpowiedzi na to pytanie. Tylko jeden z nich zachowuje skrót ( który nie istnieje w adresie URL, o który pyta i tak pytanie ). Dlaczego są dwa komentarze wskazujące, że ta odpowiedź nie chroni nieistniejącego skrótu, ale żadnego z pozostałych?
Quentin

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

5
odrzucono, ponieważ pochodzenie nie jest obsługiwane w IE11 :-(
George

6
Dlaczego miałbyś głosować na coś za to, że nie działa w konkretnej przeglądarce? Wiele miejsc nadal używa IE10 jako standardu ze względu na aplikacje, z których korzystają.
Brad

1
Działa w IE11.309.16299.0
Ryan Burbidge


5

Próbować:

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

(Uwaga: .hostzamiast .hostnametego dołącza się również port, jeśli to konieczne)



4

po prostu wytnij sznur za pomocą podziału (prosty sposób):

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

3

Aby uzyskać każdą część adresu URL oprócz zapytania:

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

Zauważ, że dotyczy to również skrótu, jeśli taki istnieje (wiem, że nie ma skrótu w twoim przykładowym adresie URL, ale podałem ten aspekt dla kompletności). Aby wyeliminować skrót, po prostu wyklucz.concat(location.hash) .

Lepszą praktyką jest concatłączenie ze sobą ciągów JavaScript (zamiast +): w niektórych sytuacjach pozwala to uniknąć problemów, takich jak pomylenie tekstu.



1

Oto dwie metody:

<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

Co powiesz na to: location.href.slice(0, - ((location.search + location.hash).length))


0

Wystarczy dodać te dwie linie do $ (dokumentu) .ready w JS w następujący sposób:

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

lepiej jest użyć znaku dolara ($) (End with)

$('nav a[href$

zamiast (^) (Zacznij od)

$('nav a[href^

ponieważ jeśli używasz znaku (^) i zagnieżdżasz adresy URL w menu nawigacyjnym, (np. „/ account” i „/ account / roles”)

Aktywuje oba z nich.


0

Jeśli używasz dot net core 3.1, obsługuje ignorowanie wielkości liter trasy, więc poprzedni sposób nie jest pomocny, jeśli trasa jest pisana małymi literami, a użytkownik zapisuje trasę wielkimi literami.

Tak więc następujący kod jest bardzo pomocny:

$(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');
    });
});
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.