433 Stimmen

Wie entfernt man den Hash aus window.location (URL) mit JavaScript ohne Seitenaktualisierung?

Ich habe URL wie: http://example.com#something wie kann ich die #something ohne die Seite zu aktualisieren?

Ich habe die folgende Lösung versucht:

window.location.hash = '';

Das Rautensymbol wird dabei jedoch nicht entfernt # aus der URL.

15voto

Rahul Gupta Punkte 8936

Um die Raute zu entfernen, können Sie die folgende Funktion verwenden

function remove_hash_from_url()
{
    var uri = window.location.toString();
    if (uri.indexOf("#") > 0) {
        var clean_uri = uri.substring(0, uri.indexOf("#"));
        window.history.replaceState({}, document.title, clean_uri);
    }
}

15voto

Chris Gunawardena Punkte 5728

Dadurch wird auch die abschließende Raute entfernt. z. B: http://test.com/123#abc -> http://test.com/123

if(window.history.pushState) {
    window.history.pushState('', '/', window.location.pathname)
} else {
    window.location.hash = '';
}

6voto

Nibras Reeza Punkte 127

Wie wäre es mit dem Folgenden?

window.location.hash=' '

Bitte beachten Sie, dass ich den Hash auf ein einzelnes Leerzeichen und nicht auf eine leere Zeichenfolge setze.


Das Setzen des Hashes auf einen ungültigen Anker führt ebenfalls nicht zu einer Aktualisierung. Zum Beispiel,

window.location.hash='invalidtag'

Ich halte die obige Lösung jedoch für irreführend. Sie scheint zu suggerieren, dass es an der angegebenen Position einen Anker mit dem angegebenen Namen gibt, obwohl dies nicht der Fall ist. Gleichzeitig führt die Verwendung einer leeren Zeichenkette dazu, dass sich die Seite nach oben bewegt, was manchmal inakzeptabel sein kann. Die Verwendung eines Leerzeichens stellt außerdem sicher, dass die Seite beim Kopieren der URL, beim Setzen eines Lesezeichens und beim erneuten Aufrufen der Seite in der Regel an erster Stelle steht und das Leerzeichen ignoriert wird.

Und, hey, das ist meine erste Antwort auf StackOverflow. Ich hoffe, jemand findet sie nützlich und sie entspricht den Standards der Community.

6voto

Casey Punkte 1746
const url = new URL(window.location);
url.hash = '';
history.replaceState(null, document.title, url);

6voto

Vimal Kumar Punkte 51
function removeLocationHash(){
    var noHashURL = window.location.href.replace(/#.*$/, '');
    window.history.replaceState('', document.title, noHashURL) 
}

window.addEventListener("load", function(){
    removeLocationHash();
});

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X