Gibt es eine Methode, um die URL ohne Abfragezeichenfolge abzurufen?

267

Ich habe eine URL wie http://localhost/dms/mduserSecurity/UIL/index.php?menu=true&submenu=true&pcode=1235.

Ich möchte die URL ohne die Abfragezeichenfolge erhalten : http://localhost/dms/mduserSecurity/UIL/index.php.

Gibt es dafür eine Methode in JavaScript? Derzeit verwende ich document.location.href, aber es gibt die vollständige URL zurück.

Heilige
quelle
2
Mögliches Duplikat von Querystring von URL entfernen
Alex Angas

Antworten:

347

Versuche dies: window.location.href.split('?')[0]

Tradyblix
quelle
12
@ Lincoln - Warum? Ich sehe keinen Grund, dass dies unsicher wäre. Es befindet sich auch innerhalb der Spezifikationen (sowohl die Spezifikationen für die Rückgabe von window.location.href als auch die Spezifikationen für die Funktionsweise der URL), sodass keine zukünftigen Probleme auftreten sollten. Es ist für saubereren Code leichter zu lesen und zu verstehen. Bei kleinerem Code ist es kürzer. Und schließlich ist es weniger intensiv und weniger kompliziert als Felix 'Antwort. Nicht zu sagen, dass Felix falsch ist, aber ich sage, dass diese Antwort ohne ein bestimmtes Beispiel für Versagen / Unsicherheit in nahezu jeder Hinsicht überlegen ist.
Jimbo Jonny
1
Sie sollten window.location.pathname ..etc wie in anderen Antworten verwenden
Muayyad Alsadi
22
@JimboJonny @Marcel Dies behandelt keine Fragment- IDs (z. B. den #Begriff in stackoverflow.com/questions/5817505#5817548 ). Sie müssten Regex verwenden oder mehrere .split () -Funktionen verwenden. Zu diesem Zeitpunkt haben Sie den Wert verloren, dass dies eine "einfache" Antwort beim Bereinigen einer URL ist. Zugegeben, dies geht technisch über den Rahmen der Frage hinaus, aber ich würde sagen, dass es immer noch relevant ist.
Andrew
2
Es ist zwar richtig, dass dies keine Fragment-IDs behandelt, aber der Fragesteller hat nicht nach einer vollständig bereinigten URL gefragt. Er fragte speziell nach einer URL ohne Abfragezeichenfolge, und diese Antwort liefert genau das. Dieselbe URL, bei der die Abfragezeichenfolge entfernt wurde.
Drew Major
383

Lesen Sie mehr über Window.locationund die LocationSchnittstelle:

var url = [location.protocol, '//', location.host, location.pathname].join('');
Felix Kling
quelle
27
Oder wenn Sie es6 verwenden, können Sie ein Zeichenfolgenliteral verwenden ${location.protocol}//${location.host}${location.pathname}
alexreardon
Obwohl beachten Sie, dass pathnamemöglicherweise die führende fallen /(bis IE 11?) . Ah, IE, immer eine Schneeflocke, nicht wahr?
Ruffin
36
location.toString().replace(location.search, "")
QUentin
quelle
11
Dies ist eine sehr unterbewertete Antwort. Es ist das einzige, das die Frage genau beantwortet. Noch kürzere Option:location.href.replace(location.search, '')
Guido Bouman
2
Was ist mit dem Fragmentteil, z. B. domain.com/?x=1#top
Onur Topal,
2
Es gibt 10 Antworten auf diese Frage. Nur einer von ihnen behält den Hash bei ( der in der URL, nach der die Frage fragt, ohnehin nicht vorhanden ist ). Warum gibt es zwei Kommentare, die darauf hinweisen, dass diese Antwort den nicht vorhandenen Hash nicht bewahrt, aber keinen der anderen?
Quentin
13
var url = window.location.origin + window.location.pathname;
Jason
quelle
5
herabgestimmt, weil Herkunft in IE11 nicht unterstützt wird :-(
George
6
Warum sollten Sie etwas herabstimmen, nur weil es in einem bestimmten Browser nicht funktioniert? Viele Orte verwenden IE10 aufgrund der von ihnen verwendeten Anwendungen immer noch als Standard.
Brad
1
Arbeitet in IE11.309.16299.0
Ryan Burbidge
10

Wenn Sie auch Hash entfernen möchten, versuchen Sie Folgendes: window.location.href.split(/[?#]/)[0]

user1079877
quelle
5

Versuchen:

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

(NB: .hostanstatt .hostnamedass der Port bei Bedarf auch einbezogen wird)

Alnitak
quelle
4

Schneiden Sie die Schnur einfach mit split (auf einfache Weise):

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

So rufen Sie jeden Teil der URL mit Ausnahme der Abfrage ab:

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

Beachten Sie, dass dies auch den Hash enthält, falls es einen gibt (ich bin mir bewusst, dass Ihre Beispiel-URL keinen Hash enthält, aber ich habe diesen Aspekt der Vollständigkeit halber aufgenommen). Um den Hash zu entfernen, schließen Sie ihn einfach aus .concat(location.hash).

Es ist besser concat, Javascript-Zeichenfolgen miteinander zu verbinden (anstatt +): In einigen Situationen werden Probleme wie Typverwirrung vermieden.

Andrew Faulkner
quelle
1

Verwenden Sie Eigenschaften von window.location

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

Weitere Eigenschaften finden Sie unter https://developer.mozilla.org/en/DOM/window.location

Detaylor
quelle
1

Hier sind zwei Methoden:

<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
quelle
1

Wie wäre es damit: location.href.slice(0, - ((location.search + location.hash).length))

LI XiangChen
quelle
0

Fügen Sie diese beiden Zeilen einfach wie folgt zu $ ​​(document) .ready in JS hinzu:

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

Es ist besser, das Dollarzeichen ($) zu verwenden (Ende mit).

$('nav a[href$

anstelle von (^) (Beginnen mit)

$('nav a[href^

denn wenn Sie das Zeichen (^) verwenden und verschachtelte URLs im Navigationsmenü haben (z. B. "/ account" und "/ account / role")

Es werden beide aktiv.

i Intelligentes Lernen
quelle
0

Wenn Sie dot net core 3.1 verwenden, wird die Route zum Ignorieren von Groß- und Kleinschreibung unterstützt. Daher ist der vorherige Weg nicht hilfreich, wenn der Router in Kleinbuchstaben geschrieben ist und der Benutzer den Router in Großbuchstaben schreibt.

Der folgende Code ist also sehr hilfreich:

$(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 Intelligentes Lernen
quelle