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.


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

Antworten:


347

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


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


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

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;

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]


5

Versuchen:

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

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



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]);

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.



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>

1

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


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.


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');
    });
});
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.