J'ai une URL comme:, http://example.com#something
comment supprimer #something
, sans provoquer le rafraîchissement de la page?
J'ai tenté la solution suivante:
window.location.hash = '';
Cependant, cela ne supprime pas le symbole #
de hachage de l'URL.
javascript
window.location
fragment-identifier
Tom Lehman
la source
la source
Réponses:
Question initiale:
ou
les deux renverront l'URL sans le hachage ou quoi que ce soit après.
En ce qui concerne votre montage:
Toute modification
window.location
entraînera une actualisation de la page. Vous pouvez modifierwindow.location.hash
sans déclencher l'actualisation (bien que la fenêtre saute si votre hachage correspond à un identifiant sur la page), mais vous ne pouvez pas vous débarrasser du signe de hachage. Faites votre choix pour ce qui est pire ...RÉPONSE LA PLUS ACTUELLE
La bonne réponse sur la façon de le faire sans sacrifier (soit un rechargement complet ou en laissant le signe de hachage là-bas) est ici . Laissant cette réponse ici par rapport à l'original en 2009 alors que la bonne qui utilise les nouvelles API de navigateur a été donnée 1,5 an plus tard.
la source
De nos jours, résoudre ce problème est beaucoup plus à portée de main. L' API Historique HTML5 nous permet de manipuler la barre d'adresse pour afficher n'importe quelle URL dans le domaine actuel.
Démo de travail: http://jsfiddle.net/AndyE/ycmPt/show/
Cela fonctionne dans Chrome 9, Firefox 4, Safari 5, Opera 11.50 et dans IE 10. Pour les navigateurs non pris en charge, vous pouvez toujours écrire un script dégradant gracieusement qui l'utilise lorsqu'il est disponible:
Vous pouvez donc vous débarrasser du symbole de hachage, mais pas dans tous les navigateurs - pour le moment.
Remarque: si vous souhaitez remplacer la page actuelle dans l'historique du navigateur, utilisez
replaceState()
plutôt quepushState()
.la source
(Trop de réponses sont redondantes et obsolètes.) La meilleure solution est la suivante:
la source
history.pushState(null, null, ' ')
place si vous souhaitez conserver l'historique.null
pour les paramètresstate
ettitle
finit par faire.Simple et élégant:
la source
.
place de/
. L'utilisation/
modifie l'URL du chemin racine.history.replaceState({}, document.title, location.href.substr(0, location.href.length-location.hash.length));
pour mon cas d'utilisation.history.replaceState(null, document.title, location.pathname + location.search);
Pour supprimer le hachage, vous pouvez essayer d'utiliser cette fonction
la source
Cela supprimera également le hachage de fin. par exemple: http://test.com/123#abc -> http://test.com/123
la source
Et les choses suivantes?
window.location.hash=' '
Veuillez noter que je mets le hachage sur un seul espace et non sur une chaîne vide.
La définition du hachage sur une ancre non valide ne provoque pas non plus d'actualisation. Tel que,
window.location.hash='invalidtag'
Mais, je trouve la solution ci-dessus trompeuse. Cela semble indiquer qu'il y a une ancre sur la position donnée avec le nom donné bien qu'il n'y en ait pas. Dans le même temps, l'utilisation d'une chaîne vide entraîne le déplacement de la page vers le haut, ce qui peut parfois être inacceptable. L'utilisation d'un espace garantit également que chaque fois que l'URL est copiée, mise en signet et visitée à nouveau, la page sera généralement en haut et l'espace sera ignoré.
Et, hé, c'est ma première réponse sur StackOverflow. J'espère que quelqu'un le trouve utile et qu'il correspond aux normes de la communauté.
la source
Vous pouvez le faire comme ci-dessous:
history.replaceState({}, document.title, window.location.href.split('#')[0]);
la source
la source
mettre ce code sur la section tête
la source
la source
Je pense que ce serait plus sûr
la source
Essayez ce qui suit:
la source
Voici une autre solution pour modifier l'emplacement à l'aide de href et effacer le hachage sans faire défiler.
La solution magique est expliquée ici . Spécifications ici .
REMARQUE: l'API proposée fait maintenant partie de WhatWG HTML Living Standard
la source
la source
Vous pouvez remplacer le hachage par null
la source