На самом деле оба ваших примера работают одинаково./stations/
и /stations/index.html
оба разделяются на две строки;/stations/
имеет пустую строку в конце.Так что length-2
сработало бы.Где бы это не сработало, было бы /stations
, что выше уровня.Но обычно это не проблема, потому что если stations
является статическим каталогом, веб-сервер перенаправит браузер на /stations/
с косой чертой.
Этого не произойдет, если вы делаетепойдут сами.Если вы выполняете маршрутизацию, не рекомендуется индексировать с конца списка частей пути, если там есть какой-то старый мусор, передаваемый как параметры пути, например./stations/region1/stationname2
.В этом случае вы должны индексировать с самого начала.
Если приложение можно смонтировать по пути, отличному от корня, вам нужно будет указать в JavaScript путь этого корня, чтобы он мог определить, сколькокосые черты, чтобы пропустить.Возможно, вам также понадобится сообщить это для других целей, например, если он создает какие-либо изображения на лету, ему потребуется знать корень, чтобы определить каталог для получения изображений.
var BASE= '/path-to/mysite';
var BASELEVEL= BASE.split('/').length;
...
var pagename= location.pathname.split('/')[BASELEVEL];
// '/path-to/mysite/stations/something' -> 'stations'
Я использую location.pathname
для извлечения только части пути URL, вместо того, чтобы пытаться отделить href
с помощью строковых или регулярных выражений, что приведет к ошибке для строк запроса и идентификаторов фрагментов с /
в них.*
(См. Также protocol
, host
, port
, search
, hash
для других частей URL.)