2011-02-02 20 views
8

Hola, espero que alguien pueda ayudar. Quiero ocultar el identificador de fragmento en la barra de dirección de modo que en lugar de:eliminando el identificador # fragmento de la barra de direcciones

www.mydomain.com/example.html#something

apenas consigo:

www.mydomain.com /example.html

cuando hago clic en una etiqueta de anclaje.

He visto muchas preguntas y foros relacionados, pero todavía no puedo entenderlo. Estoy bastante seguro de que debería estar usando algo como:

window.location.href.replace(/#.*/,''); //and or .hash 

poner simplemente no puedo entenderlo.

localScroll El complemento le permite ocultar o mantener los identificadores y, por defecto, están ocultos. Creo que muchos complementos de la galería también tienen una opción similar.

pero cuando intento y lo hago yo mismo (un poco novato) me vuelvo loco sin ningún resultado.

a continuación es una secuencia de comandos básicos ejemplo, me gustaría que funcione con:

<style> 
.wrap{ 
width:300px; 
height:200px; 
margin:auto; 
} 

.box{ 
width:300px; 
height:200px; 
position:absolute; 
display:none; 
} 

#one{background:red;} 
#two{background:blue;} 
#three{background:green;} 

.load{display:block;} 
</style> 


<body> 
<ul> 
    <li><a href="#one">One</a></li> 
    <li><a href="#two">Two</a></li> 
    <li><a href="#three">Three</a></li> 
</ul> 

<div class="wrap"> 
    <div id="one" class="box load">This is Box 1</div> 
    <div id="two" class="box">This is Box 2</div> 
    <div id="three" class="box">This is Box 3</div> 
</div> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script> 
$(document).ready(function() { 

$("ul li a").click(function(){ 

     $("div.box").fadeOut(1000); 

     $($(this).attr('href')).fadeIn(1000); 

    }); 
}); 
</script> 
</body> 
+0

No soy muy claro en lo que estás tratando de hacer, para ser honesto. Tu código parece estar funcionando bien. – Kobi

+0

duplicidad http://stackoverflow.com/questions/680785/on-window-location-hash-change –

Respuesta

19

Añadir

return false; 

al final de su función de clic, detendrá la propagación de este evento

+1

+1 - Publiqué una gran respuesta larga sobre las cosas de la etiqueta hash, pero ahora que tengo De hecho, leí su código, veo que su solución le dará el comportamiento que él quiere. :-) –

+0

muchas gracias, tan molesto fue así de simple. Creo que mirando las preguntas de otras personas y Google me confundió y desvió – thom

+0

gracias por esta respuesta. Me salvó el día. – Montiyago

-1

probar esto .... que eliminará # globalmente en su URL

window.location.href.replace(/\#*/g, "") 

aquí es DEMO

+4

'example.html # something' ->' example.htmlsomething'? Probablemente no es una buena idea ':)' – Kobi

+0

no es como que he escrito lo mismo en el archivo local, así que simplemente copie pegar eso y cometió este error :) – Vivek

+1

La función reemplazar devuelve una cadena * nueva * con el reemplazo. Necesitas asignar el resultado a alguna parte. –

3

la función replace devuelve una nueva cadena, no funciona en la anterior. Necesita usar: window.location.href = window.location.href.replace(/#.*/,'').

Sin embargo, esto no tendrá el efecto esperado, ya que al cambiar window.location.href de alguna manera que no sea simplemente agregar o cambiar una etiqueta hash provoca una recarga de página.

El plugin localScroll funciona buscando el hashtag y utilizando el plugin jQuery scrollTo para desplazarse a la ubicación y evitar el comportamiento predeterminado del navegador cuando hace clic en un enlace con una etiqueta hash. En realidad, no han cambiado la URL para eliminar el hash, han impedido que aparezca.

Lo mejor que puede hacer si desea eliminar el hash de la URI es mantener sólo el # al final:

window.location.href = window.location.href.replace(/#.*/,'#'); 

Aunque en algunos navegadores antiguos, incluso esto dará lugar a una recarga de la página (solo navegadores muy antiguos, sin embargo).

+0

aunque devuelva falso; era lo que se necesitaba, gracias por tu respuesta. ayudó a explicar qué estaba haciendo localScroll y por qué lo que estaba intentando no funcionaba. – thom

Cuestiones relacionadas