En fait vos deux exemples fonctionnent de la même manière. /stations/
et /stations/index.html
tous les deux sont divisés en deux chaînes; /stations/
a une chaîne vide à la fin. Donc, length-2
aurait travaillé. Où cela ne fonctionnerait pas serait /stations
, qui est en hausse d'un niveau. Mais ce ne serait normalement pas un problème car si stations
est un répertoire statique, le serveur web redirigera le navigateur vers /stations/
avec la barre oblique.
Cela n'arrivera pas si vous faites le routage vous-même. Si vous faites du routage, ce n'est pas une bonne idée d'indexer à partir de la fin de la liste des parties de chemin, il y a peut-être de vieilles ordures passées comme paramètres de chemin, par exemple. /stations/region1/stationname2
. Dans ce cas, vous devriez indexer à partir du début à la place.
Si l'application peut être montée sur un chemin autre qu'une racine, vous devrez indiquer à JavaScript le chemin de cette racine, afin qu'elle calcule le nombre de barres obliques à ignorer. Vous aurez probablement aussi besoin de le dire à d'autres fins, par exemple s'il crée des images à la volée, il aura besoin de connaître la racine pour travailler sur le répertoire pour obtenir des images.
var BASE= '/path-to/mysite';
var BASELEVEL= BASE.split('/').length;
...
var pagename= location.pathname.split('/')[BASELEVEL];
// '/path-to/mysite/stations/something' -> 'stations'
J'utilise location.pathname
pour extraire uniquement la partie du chemin de l'URL, plutôt que d'essayer de prendre part href
avec des méthodes de chaîne ou regex qui échoueraient pour les chaînes de requête et les identificateurs de fragment avec /
en eux.
(Voir aussi , host
, port
, search
, hash
pour les autres parties de l'URL.)
Pourquoi ne pas utiliser votre langage côté serveur pour ce faire? – greg0ire
'loc_array [loc_array.length-1]' sera en fait une chaîne vide si votre URL est '/ test/stations /', donc cela ne fonctionnerait pas de toute façon. – casablanca