2016-07-07 10 views
0

Ich habe den folgenden Code:Entfernen Sie den Hash aus url

jQuery(document).ready(function($) { 
    $('.tab-title').on('click', function(e) { 
     window.location.hash = $(this).attr('href'); 
     e.preventDefault(); 
    var _self = $(this); 
    $('.tab').removeClass('active'); 
    _self.parent().addClass('active'); 
    }); 
}); 

und meine PHP

<div class="tab active"> 
    <a href="<?php the_field('service_name');?>" class="tab-title"><?php the_field('service_title'); ?></a> 
</div> 
<div class="tab-content"> 
<h2><?php the_field('service_title'); ?> </h2> 
    <p><?php the_field('service_desc'); ?></p> 
    <p><?php the_field('service_area');?></p> 
</div> 

Die Website url: mysite.com/services/marketing/#internet

Das Problem ist die (#), die eingeschlossen in die Website-URL Ist es möglich, diese URL zu entfernen?

+0

Möchten Sie nur # oder #internet entfernen? – Sree

+0

Aber Sie setzen es explizit in Ihrem Code. Möchten Sie es einfach nicht einstellen, d. H. Die 'window.location.hash' Zeile oder etwas anderes löschen? Es dient einem Zweck: Es erlaubt jemandem, der ein Lesezeichen gesetzt hat oder die URL kopiert/eingefügt hat, zu dem richtigen Tab zurückzukehren, vorausgesetzt, Sie haben gleichwertigen Code, um das beim Start zu verarbeiten. – Rup

+0

@Stree Ich möchte nur die (#) – miked

Antwort

4

Versuchen Sie folgendes:

history.pushState("", document.title, window.location.pathname); 

EDITED

den folgenden Code Versuchen Sie, wenn Sie nur # aus der URL entfernen möchten:

history.pushState({}, document.title, location.href.replace('#', "/")); 

Die pushstate() Methode

pushState() akzeptiert drei Parameter: ein Zustandsobjekt, einen Titel (der derzeit ignoriert wird) und (optional) eine URL. Lassen Sie sich jede dieser drei Parameter genauer untersuchen:

  • Statusobjekt: Das Statusobjekt ist ein JavaScript-Objekt, das mit dem neuen Historieneintrag von pushstate erstellt assoziiert ist(). Wenn der Benutzer zum neuen Status navigiert, wird ein Popstate-Ereignis ausgelöst und die Statuseigenschaft des Ereignisses enthält eine Kopie des Statusobjekts des Verlaufseintrags .

    Das Statusobjekt kann alles sein, das serialisiert werden kann. Da Firefox Statusobjekte auf dem Datenträger des Benutzers speichert, so dass sie wiederhergestellt werden können, nachdem der Benutzer den Browser neu startet, erzwingen wir eine Größenbeschränkung von 640k Zeichen auf der serialisierten Darstellung eines Zustand Objekts. Übergeben Sie ein Zustandsobjekt, dessen serialisierte Darstellung größer als das ist, an PushState(), wird die Methode eine Ausnahme auslösen. Wenn Sie mehr Speicherplatz benötigen, sollten Sie sessionStorage und/oder localStorage verwenden.

  • title: Firefox ignoriert diesen Parameter derzeit, obwohl er in Zukunft verwenden könnte. Das Übergeben des leeren Strings hier sollte sicher sein gegen zukünftige Änderungen an der Methode. Alternativ können Sie einen Kurztitel für den Staat, in den Sie umziehen, übergeben.
  • URL: Die URL des neuen Verlaufseintrags wird durch diesen Parameter angegeben. Hinweis , dass der Browser nicht versucht, diese URL nach einem Aufruf von pushState() zu laden, aber möglicherweise versucht, die URL später zu laden, zum Beispiel , nachdem der Benutzer den Browser neu gestartet hat. Die neue URL muss nicht absolut sein; Wenn es relativ ist, wird es relativ zur aktuellen URL aufgelöst. Die neue URL muss denselben Ursprung haben wie die aktuelle URL. anderenfalls wird pushState() eine Ausnahme auslösen.Dieser Parameter ist optional; Wenn sie nicht angegeben ist, wird sie auf die aktuelle URL des Dokuments gesetzt.

Schauen Sie sich diese für weitere Informationen History_API

+1

Ich denke, du hast recht, er will die Geschichte API, aber es sieht so aus, als ob er den ausgewählten Tab-Namen am Ende der URL auch möchte - und auch im Titel würde ich raten - und ich habe 'null' öfter gesehen als '" "für keine Daten. – Rup

+0

@Rup Ich aktualisiere den Code – miked

+0

@MikeD Ich habe die Antwort bearbeitet. Einige Details zur 'pushState' Methode hinzugefügt. Suchen Sie nach mehr Informationen bitte :) –

0

Nach vielen Stunden und mit klarem Verstand finde ich die Lösung.

jQuery(document).ready(function($) { 
    $('.tab-title').on('click', function(e) { 
     window.location.hash = $(this).attr('href'); 
     history.pushState({}, document.title, location.hash.replace('#', "/")); 
     e.preventDefault(); 
    var _self = $(this); 
    $('.tab').removeClass('active'); 
    _self.parent().addClass('active'); 
    }); 
}); 

und dann folgen ich einem manuellen Weg, um meine URL für sehr Seite hinzuzufügen.