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.

święty
źródło
2
możliwy duplikat Usuń kwerendę z adresu URL
Alex Angas

Odpowiedzi:

348

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

tradyblix
źródło
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
383

Przeczytaj o Window.locationoraz Locationinterfejs:

var url = [location.protocol, '//', location.host, location.pathname].join('');
Felix Kling
źródło
27
Lub jeśli używasz es6, możesz użyć literału łańcuchowego ${location.protocol}//${location.host}${location.pathname}
alexreardon
Zauważ jednak, że pathnamemoże upuścić wiodące /(do IE 11?) . Ach, IE, zawsze płatek śniegu, prawda?
ruffin
36
location.toString().replace(location.search, "")
Quentin
źródło
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;
Jason
źródło
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
10

Jeśli chcesz również usunąć skrót, wypróbuj ten: window.location.href.split(/[?#]/)[0]

użytkownik1079877
źródło
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)

Alnitak
źródło
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]);
z przyjemnością
źródło
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.

Andrew Faulkner
źródło
1

Użyj właściwości window.location

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

Możesz zobaczyć więcej właściwości na https://developer.mozilla.org/en/DOM/window.location

detaylor
źródło
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>
TheVillageIdiot
źródło
1

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

LI XiangChen
źródło
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.

i Smart Learning
źródło
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');
    });
});
i Smart Learning
źródło