Quelle est la bonne façon d'extraire uniquement le chemin d'une URL à l'aide de JavaScript?
Exemple:
J'ai l'URL
http://www.somedomain.com/account/search?filter=a#top
mais je voudrais juste avoir cette portion
/account/search
J'utilise jQuery s'il y a quelque chose qui peut être exploité.
Il existe une propriété de l'objet window.location
intégré qui fournira cela pour la fenêtre en cours.
_// If URL is http://www.somedomain.com/account/search?filter=a#top
window.location.pathname // /account/search
// For reference:
window.location.Host // www.somedomain.com (includes port if there is one)
window.location.hostname // www.somedomain.com
window.location.hash // #top
window.location.href // http://www.somedomain.com/account/search?filter=a#top
window.location.port // (empty string)
window.location.protocol // http:
window.location.search // ?filter=a
_
Il s’avère que ce schéma est en cours de normalisation en tant qu’interface appelée URLUtils , et devinez quoi? L'objet _window.location
_ existant et les éléments d'ancrage existants implémentent l'interface.
Vous pouvez donc utiliser les mêmes propriétés que ci-dessus pour toutes les URL - créez simplement une ancre avec l'URL et accéder aux propriétés:
_var el = document.createElement('a');
el.href = "http://www.somedomain.com/account/search?filter=a#top";
el.Host // www.somedomain.com (includes port if there is one[1])
el.hostname // www.somedomain.com
el.hash // #top
el.href // http://www.somedomain.com/account/search?filter=a#top
el.pathname // /account/search
el.port // (port if there is one[1])
el.protocol // http:
el.search // ?filter=a
_
[1]: Le support des navigateurs pour les propriétés incluant le port n'est pas cohérent, voir: http://jessepollak.me/chrome- était-faux-c'est-à-dire-était-vrai
Ceci fonctionne dans les dernières versions de Chrome et de Firefox . Je n'ai pas de version d'Internet Explorer à tester, alors testez-vous avec l'exemple JSFiddle.
Il existe également un objet URL
à venir qui offrira cette prise en charge pour les URL elles-mêmes, sans l'élément d'ancrage. On dirait qu'aucun navigateur stable ne le supporte pour le moment, mais on dit que cela arrive dans Firefox 26. Si vous pensez pouvoir le supporter, essayez-le ici .
window.location.href.split('/');
Vous donnera un tableau contenant toutes les parties de l'URL, auxquelles vous pouvez accéder comme un tableau normal.
Ou une solution toujours plus élégante suggérée par @Dylan, avec uniquement les parties du chemin:
window.location.pathname.split('/');
S'il s'agit de l'URL actuelle, utilisez window.location.pathname sinon, utilisez cette expression régulière:
var reg = /.+?\:\/\/.+?(\/.+?)(?:#|\?|$)/;
var pathname = reg.exec( 'http://www.somedomain.com/account/search?filter=a#top' )[1];