Comment obtenir l'URL sans aucun paramètre en JavaScript?


176

Si j'utilise:

alert(window.location.href);

Je reçois tout, y compris les chaînes de requête. Existe-t-il un moyen d'obtenir simplement la partie principale de l'url, par exemple:

http://mysite.com/somedir/somefile/

au lieu de

http://mysite.com/somedir/somefile/?foo=bar&loo=goo

Réponses:


283

C'est possible, mais vous devrez le construire manuellement à partir de l' locationobjet :

location.protocol + '//' + location.host + location.pathname

14
Notez que vous n'avez pas besoin de fournir l'emplacement.protocol car tous les navigateurs modernes (y compris IE6) hériteront automatiquement du protocole actuel. ie:'//' + location.host + location.pathname
JonnyReeves

10
@JonnyReeves Si vous l'utilisez dans le document actuel, c'est vrai: bon point. Il y a des occasions où cela peut être nécessaire, par exemple pour la sortie de l'URL en texte brut.
lonesomeday

1
@lonesomeday votre réponse implique que c'est le seul moyen, ce qui n'est pas le cas.
Oddman le

5
Il manque un port, donc cela renverra un résultat incorrect pour la pagehttp://www.example.com:8080/asdf.html?foo=bar
izogfif

3
Vous pouvez enregistrer quelques caractères avec location.origin, ce qui, je crois, répond également aux préoccupations de @ izogfif.
Coderer le

171

Chaque réponse est assez compliquée. Ici:

var url = window.location.href.split('?')[0];

Même si un? n'est pas présent, il retournera toujours le premier argument, qui sera votre URL complète, moins la chaîne de requête.

Il est également indépendant du protocole, ce qui signifie que vous pouvez même l'utiliser pour des choses comme ftp, itunes.etc.


39
au cas où vous auriez besoin de retirer les ancreswindow.location.href.split(/[?#]/)[0];
Bahattin Ungormus

en effet, chaque réponse est plutôt alambiquée
mehmet

@mehmet toutes les oreilles si vous avez une approche plus simple :)
Oddman

1
@Oddman, je ne me souviens absolument pas à quoi je pensais à l'époque, mais je suppose que cela pourrait être une déclaration affirmative :))
mehmet

Pourquoi (si c'est le cas) cette réponse est meilleure que celle marquée acceptée ??
Vishal - JAVA - CQ

16

Utilisation indexOf

var url = "http://mysite.com/somedir/somefile/?aa";

if (url.indexOf("?")>-1){
url = url.substr(0,url.indexOf("?"));
}

5
var url = "tp://mysite.com/somedir/somefile/?foo=bar&loo=goo"    

url.substring(0,url.indexOf("?"));

3
Cela suppose que ce paramètre est défini. Mieux vauturl.split('?')[0]
actimel

5

Vous pouvez utiliser une expression régulière: window.location.href.match(/^[^\#\?]+/)[0]


5

Vous pouvez concaténer originet pathname, s'il y a un port tel que example.com:80, il sera également inclus.

location.origin + location.pathname

2

Si vous regardez la documentation, vous pouvez prendre uniquement les propriétés qui vous intéressent de l' windowobjet, c'est-à-dire

protocol + '//' + hostname + pathname
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.