Ich habe eine URL wie: http://example.com#something
Wie kann ich entfernen #something
, ohne dass die Seite aktualisiert wird?
Ich habe folgende Lösung versucht:
window.location.hash = '';
Dadurch wird das Hash-Symbol jedoch nicht #
aus der URL entfernt.
javascript
window.location
fragment-identifier
Tom Lehman
quelle
quelle
Antworten:
Erste Frage:
oder
Beide geben die URL ohne den Hash oder irgendetwas danach zurück.
In Bezug auf Ihre Bearbeitung:
Jede Änderung an
window.location
löst eine Seitenaktualisierung aus. Sie können Änderungenwindow.location.hash
vornehmen, ohne die Aktualisierung auszulösen (obwohl das Fenster springt, wenn Ihr Hash mit einer ID auf der Seite übereinstimmt), aber Sie können das Hash-Zeichen nicht entfernen. Treffen Sie Ihre Wahl, für die es schlimmer ist ...AKTUELLE ANTWORT
Die richtige Antwort, wie man es ohne Opfer macht (entweder volles Nachladen oder das Hash-Zeichen dort lassen), ist hier unten . Diese Antwort hier zu belassen, obwohl sie 2009 die ursprüngliche war, während die richtige, die neue Browser-APIs nutzt, 1,5 Jahre später gegeben wurde.
quelle
Die Lösung dieses Problems ist heutzutage viel greifbarer. Mit der HTML5-Verlaufs-API können wir die Standortleiste so bearbeiten, dass jede URL in der aktuellen Domäne angezeigt wird.
Arbeitsdemo: http://jsfiddle.net/AndyE/ycmPt/show/
Dies funktioniert in Chrome 9, Firefox 4, Safari 5, Opera 11.50 und in IE 10. Für nicht unterstützte Browser können Sie jederzeit ein ordnungsgemäß herabwürdigendes Skript schreiben, das es verwendet, sofern verfügbar:
So können Sie das Hash-Symbol entfernen, nur noch nicht in allen Browsern.
Hinweis: Wenn Sie die aktuelle Seite im Browserverlauf ersetzen möchten, verwenden Sie
replaceState()
anstelle vonpushState()
.quelle
(Zu viele Antworten sind redundant und veraltet.) Die beste Lösung ist jetzt:
quelle
history.pushState(null, null, ' ')
stattdessen, wenn Sie den Verlauf beibehalten möchten.null
der Parameterstate
undtitle
letztendlich bewirkt.Einfach und elegant:
quelle
.
anstelle von zu verwenden/
. Mit/
ändert sich die URL zum Stammpfad.history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
für meinen Anwendungsfall geändert habe.history.replaceState(null, document.title, location.pathname + location.search);
Um den Hash zu entfernen, können Sie versuchen, diese Funktion zu verwenden
quelle
Dadurch wird auch der nachfolgende Hash entfernt. Beispiel: http://test.com/123#abc -> http://test.com/123
quelle
Wie wäre es mit folgendem?
window.location.hash=' '
Bitte beachten Sie, dass ich den Hash auf ein einzelnes Leerzeichen und nicht auf eine leere Zeichenfolge setze.
Das Setzen des Hashs auf einen ungültigen Anker führt ebenfalls nicht zu einer Aktualisierung. Sowie,
window.location.hash='invalidtag'
Aber ich finde die obige Lösung irreführend. Dies scheint darauf hinzudeuten, dass sich an der angegebenen Position ein Anker mit dem angegebenen Namen befindet, obwohl es keinen gibt. Gleichzeitig führt die Verwendung einer leeren Zeichenfolge dazu, dass die Seite nach oben verschoben wird, was manchmal nicht akzeptabel sein kann. Durch die Verwendung eines Leerzeichens wird außerdem sichergestellt, dass sich die Seite bei jedem Kopieren, Lesezeichen und erneuten Besuch der URL normalerweise oben befindet und das Leerzeichen ignoriert wird.
Und hey, das ist meine erste Antwort auf StackOverflow. Hoffe, jemand findet es nützlich und es entspricht den Community-Standards.
quelle
Sie können es wie folgt tun:
history.replaceState({}, document.title, window.location.href.split('#')[0]);
quelle
quelle
Setzen Sie diesen Code auf den Kopfabschnitt
quelle
quelle
Ich denke, es wäre sicherer
quelle
Versuche Folgendes:
quelle
Hier ist eine andere Lösung, um den Speicherort mit href zu ändern und den Hash zu löschen, ohne zu scrollen.
Die magische Lösung wird hier erklärt . Technische Daten hier .
HINWEIS: Die vorgeschlagene API ist jetzt Teil des WhatWG HTML Living Standard
quelle
quelle
Sie können Hash durch null ersetzen
quelle