2017-02-07 3 views
1

nach der Arbeit an einer interaktiven Website, die automatisch mit IDs in der URL navigiert, habe ich mich gefragt, wie man das ausblenden, während es noch normal navigieren wird. Nach einigem Nachforschen habe ich das folgende Skript gefunden, das bei mir nicht funktioniert.Ausblenden # From URLs Javascript

if ($.browser.msie && parseInt($.browser.version, 10) === 9 && window.location.href.indexOf("#")) 
    { 
     document.location.href = String(document.location.href).replace(/#/, ""); 
    } 

ankit Chaudhary & Jetpack Pony meine Frage beantwortet, ich hatte Bedenken nur die behandelt wurden.

+0

Zuerst '$ .browser' ist seit Jahren veraltet, und es ist wahrscheinlich schon aus den letzten 'jQuery's entfernt. Zweitens ersetzt der Code nur die # # -Markierung, aber nicht den Hash-Inhalt selbst, was sich nicht sehr nützlich anhört. Bitte klären Sie Ihr Problem. –

+0

Bitte spezifizieren Sie "funktioniert nicht für mich". Was genau macht dein Snippet falsch und was sollte es tun? – gus27

+0

Es sollte die ID aus der URL verbergen, ohne die Navigation zwischen diesen Elementen mit ihren IDs zu kompromittieren. Wenn ich www.site.com/#home betrete, werde ich zum Home-Bereich weitergeleitet und die URL wird www.site.com lesen. –

Antwort

0

Sie ersetzen nur "#" - Symbol in Ihrer Ersetzungsmethode. Um die gesamte Hash ersetzen sollte es so aussehen:

.replace(/#.+$/, ""); 

Auch anstelle von document.location.href betrachten HTML5 history API verwenden. Es bietet zwei Methoden:

pushstate(): es ändert sich die URL in der URL-Leiste und erstellt eine neue Geschichte Eintrag. Wenn Sie sich beispielsweise auf einer Seite example.com/#foo befinden und Sie history.pushState("", "", "example.com") anrufen, wird in Ihrer URL-Leiste example.com angezeigt. Wenn Sie auf einen Browser-Zurück-Pfeil drücken, gelangen Sie zurück zu example.com/#foo.

replaceState(): es ändert sich die URL in der URL-Leiste und ersetzt eine aktuelle Geschichte Eintrag. Das bedeutet, dass im gleichen Beispiel wie oben der Browser-Pfeil zurück zu einer Seite vor example.com/#foo führt. Hier

ist ein Beispiel für den Code mit pushstate():

var loc = window.location; 
if (loc.hash) { 
    history.pushState({}, document.title, loc.pathname + loc.search); 
} 

Der Browser Unterstützung dieser API für Details sehr gut überprüfen: Browser compatibility

0

Sie könnten die Methode pushState verwenden, um die URL zu manipulieren, ohne die Seite neu zu laden/zu aktualisieren.

window.history.pushState(
    "object or string", 
    "Title", 
    window.location.href.substring(0, window.location.href.indexOf('#')) 
); 
+0

Ich werde das beim nächsten Mal beachten. Kann dies mehr als einmal auf demselben Ziel verwendet werden? –