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.

694voto

Andy E Punkte 324972

Die Lösung dieses Problems ist heute viel leichter zu erreichen. Die HTML5 Geschichte API ermöglicht es uns, die Standortleiste so zu manipulieren, dass jede URL innerhalb der aktuellen Domäne angezeigt wird.

function removeHash () { 
    history.pushState("", document.title, window.location.pathname
                                                       + window.location.search);
}

Arbeits-Demo: http://jsfiddle.net/AndyE/ycmPt/show/

Dies funktioniert in Chrome 9, Firefox 4, Safari 5, Opera 11.50 y im IE 10. Für nicht unterstützte Browser können Sie immer ein Skript schreiben, das diese Funktion nutzt, sofern sie verfügbar ist:

function removeHash () { 
    var scrollV, scrollH, loc = window.location;
    if ("pushState" in history)
        history.pushState("", document.title, loc.pathname + loc.search);
    else {
        // Prevent scrolling by storing the page's current scroll offset
        scrollV = document.body.scrollTop;
        scrollH = document.body.scrollLeft;

        loc.hash = "";

        // Restore the scroll offset, should be flicker free
        document.body.scrollTop = scrollV;
        document.body.scrollLeft = scrollH;
    }
}

Sie können also das Rautensymbol loswerden, nur nicht in allen Browsern - noch nicht.

Hinweis: Wenn Sie die aktuelle Seite im Browserverlauf ersetzen möchten, verwenden Sie <code>replaceState()</code> 代わりに <code>pushState()</code> .

246voto

Gabriel Hurley Punkte 38778

Erste Frage:

window.location.href.substr(0, window.location.href.indexOf('#'))

o

window.location.href.split('#')[0]

beide geben die URL ohne den Hash oder irgendetwas danach zurück.

In Bezug auf Ihre Bearbeitung:

Jede Änderung der window.location wird eine Aktualisierung der Seite ausgelöst. Sie können ändern window.location.hash ohne die Aktualisierung auszulösen (obwohl das Fenster springt, wenn Ihre Raute mit einer ID auf der Seite übereinstimmt), aber Sie können das Rautenzeichen nicht loswerden. Entscheiden Sie selbst, was schlimmer ist...

AKTUELLSTE ANTWORT

Die richtige Antwort auf die Frage, wie man das macht, ohne etwas zu opfern (entweder vollständig neu laden oder das Rautenzeichen stehen lassen), lautet hier unten . Ich lasse diese Antwort hier, weil sie die ursprüngliche Antwort aus dem Jahr 2009 ist, während die richtige Antwort, die neue Browser-APIs nutzt, 1,5 Jahre später gegeben wurde.

169voto

Pacerier Punkte 80774

(Zu viele Antworten sind überflüssig und veraltet.) Die beste Lösung ist jetzt diese:

history.replaceState(null, null, ' ');

52voto

cprcrack Punkte 15337

Einfach und elegant:

history.replaceState({}, document.title, ".");  // replace / with . to keep url

32voto

METALHEAD Punkte 2374

Sie können dies wie folgt tun:

history.replaceState({}, document.title, window.location.href.split('#')[0]);

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