Ich versuche alles nach dem "?" in der Browser-URL auf Dokument bereit.
Folgendes versuche ich:
jQuery(document).ready(function($) {
var url = window.location.href;
url = url.split('?')[0];
});
Ich kann dies tun und sehe, dass das Folgende funktioniert:
jQuery(document).ready(function($) {
var url = window.location.href;
alert(url.split('?')[0]);
});
javascript
jquery
Derek
quelle
quelle
.ready()
? Sie müssen nicht warten, um zu einer neuen URL umzuleiten oder einfach.pushState()
wie von Joraid empfohlen zu verwenden.Antworten:
TL; DR
1- Verwenden Sie Folgendes, um die aktuelle URL zu ändern und sie (die neue geänderte URL) als neuen URL-Eintrag zur Verlaufsliste hinzuzufügen / einzufügen :
pushState
2- Um die aktuelle URL zu ersetzen, ohne sie zu Verlaufseinträgen hinzuzufügen , verwenden Sie
replaceState
:3- Abhängig von Ihrer Geschäftslogik ist
pushState
dies in folgenden Fällen hilfreich:Sie möchten die Zurück-Schaltfläche des Browsers unterstützen
Sie möchten eine neue URL erstellen , die neue URL zu Verlaufseinträgen hinzufügen / einfügen / verschieben und sie zur aktuellen URL machen
Benutzer können die Seite mit denselben Parametern als Lesezeichen speichern (um denselben Inhalt anzuzeigen)
programmgesteuert auf die Daten zugreifen , indem sie
stateObj
vom Anker aus analysiert werdenWie ich aus Ihrem Kommentar verstanden habe, möchten Sie Ihre URL bereinigen, ohne sie erneut umzuleiten.
Beachten Sie, dass Sie nicht die gesamte URL ändern können. Sie können einfach ändern, was nach dem Domainnamen kommt. Dies bedeutet, dass Sie nicht ändern können,
www.example.com/
aber Sie können ändern, was danach kommt.com/
Hintergrund
Wir können benutzen:
1- Die pushState () -Methode, wenn Sie Verlaufseinträgen eine neue geänderte URL hinzufügen möchten .
2- Die replaceState () -Methode, wenn Sie den aktuellen Verlaufseintrag aktualisieren / ersetzen möchten .
Code
Dazu verwende ich für dieses Beispiel die pushState () -Methode, die ähnlich wie das folgende Format funktioniert:
Fühlen Sie sich frei zu ersetzen
pushState
mitreplaceState
basierend auf Ihren Anforderungen.Sie können den Parameter
"object or string"
durch{}
und"Title"
mitdocument.title
ersetzen, sodass die endgültige Aussage wie folgt lautet:Ergebnisse
Die beiden vorherigen Codezeilen erstellen eine URL wie:
Werden:
Aktion
Versuchen wir nun einen anderen Ansatz. Angenommen, Sie müssen den Dateinamen beibehalten. Der Dateiname steht nach dem letzten
/
und vor der Abfragezeichenfolge?
.Wird sein:
So etwas wird es zum Laufen bringen:
AKTUALISIEREN:
Probieren Sie dies für Einzeiler-Fans in Ihrer Konsole / Ihrem Firebug aus. Die URL dieser Seite ändert sich:
Diese Seiten-URL ändert sich von:
Zu
Hinweis: Wie Samuel Liew in den Kommentaren unten angegeben hat, wurde diese Funktion nur für eingeführt
HTML5
.Ein alternativer Ansatz wäre, Ihre Seite tatsächlich umzuleiten (aber Sie verlieren die Abfragezeichenfolge "?", Wird sie noch benötigt oder wurden die Daten verarbeitet?).
quelle
replaceState
scheint besser zu passen,pushState
funktioniert aber auch, bis Sie im Browser auf die Schaltflächen "Zurück" und "Vorwärts" klicken und feststellen, dass es einen Grund gibt, warum es ganze Bibliotheken für die Arbeit mit der Verlaufs-API gibt.url.substring(url.lastIndexOf('/') + 1);
.url.split("?")[0]
Ich werde den Teil vor dem ersten Fragezeichen bekommen, was alles ist, worum das OP meiner Meinung nach gebeten hat. Die Frage des OP lautet: "Ich versuche, alles nach dem"? "In der Browser-URL zu entfernen."Diese sind alle irreführend. Sie möchten sie niemals zum Browserverlauf hinzufügen, es sei denn, Sie möchten in einer App für eine einzelne Seite zu einer anderen Seite wechseln. Wenn Sie die Parameter ohne Änderung der Seite entfernen möchten, müssen Sie Folgendes verwenden:
quelle
Ein einfacher Weg, dies zu tun, funktioniert auf jeder Seite, erfordert HTML 5
quelle
Ich glaube, die beste und einfachste Methode dafür ist:
quelle
Wenn ich am Ende meiner URL ein spezielles Tag habe, wie z. B .: http://domain.com/?tag=12345 Hier ist der folgende Code, um dieses Tag zu entfernen, wenn es in der URL angezeigt wird:
Dies gibt die Idee, einen oder mehrere (oder alle) Parameter aus der URL zu entfernen
Mit window.location.pathname erhalten Sie im Grunde alles vor '?' in der URL.
quelle
Ich wollte nur einen Parameter entfernen
success
. So können Sie das machen:Dies bleibt auch erhalten
#hash
.URLSearchParams
funktioniert nicht im IE, wird aber für Edge bearbeitet . Sie können eine Polyfill oder eine naive Hilfsfunktion für die IE-Unterstützung verwenden:Dies kann verwendet werden wie:
quelle
take_param
macht das das schon, aber Sie könnenURLSearchParams
das Gleiche tun, indem Sie :history.replaceState(null, '', (params ? '?' + params : '') + location.hash)
. Oder wie du willst.Bessere Lösung:
quelle
Keine dieser Lösungen hat bei mir wirklich funktioniert. Hier ist eine IE11-kompatible Funktion, mit der auch mehrere Parameter entfernt werden können:
quelle
quelle
So löschen Sie alle Parameter, ohne eine Seitenaktualisierung durchzuführen, UND wenn Sie HTML5 verwenden, können Sie Folgendes tun:
history.pushState({}, '', 'index.html' ); //replace 'index.html' with whatever your page name is
Dadurch wird ein Eintrag im Browserverlauf hinzugefügt. Sie können auch überlegen,
replaceState
ob Sie keinen neuen Eintrag hinzufügen und nur den alten Eintrag ersetzen möchten.quelle
Verwenden Sie in jquery <
quelle
Hier ist ein ES6-Einzeiler, der den Standort-Hash beibehält und den Browserverlauf nicht verschmutzt, indem er Folgendes verwendet
replaceState
:quelle
location
aka-window.location
Objekt, sodass die Funktion Zugriff auf die globalen Objekte hat,location
dal
der Rest als Ersatz ersetzt wird. Wie in allen anderen Antworten verkettet er den Pfadnamen und den Hash (example.com/#hash) als neue URL. Hoffe es ist verdaulich, wenn nicht lassen Sie es mich wissen 😉window.history.replaceState({}, '', location.pathname + location.hash)
? ;)location
zweimal schreiben müssen, es aber keiner Variablen zuweisen müssen oder ob es mehr gibt, Joey?