101 votes

javascript window location href sans hash ?

Je l'ai fait :

var uri = window.location.href;

Cela permet http://example.com/something#hash

Quel est le meilleur et le plus simple moyen d'obtenir le chemin entier sans le #hash ?

uri    = http://example.com/something#hash
nohash = http://example.com/something

J'ai essayé d'utiliser location.origin+location.pathname qui ne fonctionne pas dans tous les navigateurs. J'ai essayé d'utiliser location.protocol+'//'+location.host+location.pathname ce qui me semble être une solution plutôt minable.

Quel est le moyen le plus simple et le plus efficace de le faire ? Peut-être que je demande location.hash et que j'essaie de substr() ceci à partir de l'uri ?

1 votes

BTW, si vous faites cela juste pour faire un lien vers une #section sur la même page, il suffit de définir le lien href à #section . Vous n'avez pas besoin de récupérer l'url de base de la page puis de concaténer le hash à la fin.

109voto

mplungjan Points 36458

location.protocol+'//'+location.host+location.pathname est la syntaxe correcte si vous ne vous souciez pas du numéro de port ou de la chaîne de requête.

Si vous vous en souciez :

https://developer.mozilla.org/en/DOM/window.location

location.protocol+'//'+
  location.host+
  location.pathname+
 (location.search?location.search:"")

ou

location.protocol+'//'+
  location.hostname+
 (location.port?":"+location.port:"")+
  location.pathname+
 (location.search?location.search:"")

Vous pouvez aussi simplement faire un location.href.replace(location.hash,"")

Vous pouvez également créer un Objet URL :

const url = new URL("https://www.somepage.com/page.hmtl#anchor") //(location.href);
console.log(url)
url.hash="";
console.log(url)

0 votes

Vous avez perdu la chaîne de requête (s'il y en avait une) à cet endroit.

1 votes

Il semble que location.host inclut le port.

17 votes

La dernière partie concernant .replace(location.hash,'') est brillant et juste ce que je cherchais.

93voto

Nick Brunt Points 3517
var uri = window.location.href.split("#")[0];

// Returns http://example.com/something

var hash = window.location.hash;

// Returns #hash

3 votes

Le signe dièse n'est pas inclus dans la deuxième partie de ce tableau.

0 votes

J'ai inclus un correctif ! :-)

3 votes

Ça ne marche pas. "foo#bar#baz".split("#") == "bar"

20voto

Quentin Points 325526
location.href.replace(location.hash,"")

0 votes

(location+'').href.replace(location.hash,"") fonctionne dans firefox (l'emplacement n'est pas une chaîne régulière)

0 votes

Mais attention que location.hash est '' quand l'url est somehting.com/#

0 votes

De manière surprenante pour moi, cela ne se brisera pas si location.hash est contenue ailleurs dans l'URL. Par exemple, " exemple.com/#exemple ". Parce que location.hash contient le "#" de tête. Sauf lorsque le hachage est vide, comme indiqué ci-dessus.

9voto

Alain Beauvois Points 2572

La voie universelle est-elle aussi la plus petite ?

location.href.split(/\?|#/)[0]

7voto

Sebastien P. Points 461

Des solutions plus courtes :

  • sans chaîne de requête et sans hachage location.href.split(location.search||location.hash||/[?#]/)[0]

  • seulement sans hachage location.href.split(location.hash||"#")[0]

(J'utilise généralement le premier)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X