Wie kann ich den aktuellen Verzeichnisnamen in Javascript erhalten?

74

Ich versuche, das aktuelle Verzeichnis der Datei in Javascript abzurufen, damit ich damit für jeden Abschnitt meiner Site eine andere Abfragefunktion auslösen kann.

if (current_directory) = "example" {
var activeicon = ".icon_one span";
};
elseif (current_directory) = "example2" {
var activeicon = ".icon_two span";
};
else {
var activeicon = ".icon_default span";
};

$(activeicon).show();
...

Irgendwelche Ideen?

user380303
quelle

Antworten:

80

Mit window.location.pathname erhalten Sie das Verzeichnis sowie den Seitennamen. Sie können dann .substring () verwenden, um das Verzeichnis abzurufen:

var loc = window.location.pathname;
var dir = loc.substring(0, loc.lastIndexOf('/'));

Hoffe das hilft!

Ryan Kinal
quelle
Meine Joomla-Site erzeugt URLs wie diese: localhost / sub / sub / sub / index.php / ali-mm-d # tab2 (unter anderem seltsame Dinge), daher erzeugt dieser Ansatz KEIN Verzeichnis, sondern: localhost / sub / sub / sub / index.php
dsdsdsdsd
Zu Ihrer Information: wenn loc === '/'danndir === ''
raphinesse
30

In Node.js können Sie Folgendes verwenden:

console.log('Current directory: ' + process.cwd());
Philip Brodovsky
quelle
Bitte beschreiben Sie mehr.
TigerTV.ru
Diese Antwort für die NodeJS-Plattform. Sie sollten sagen, wo Sie Javascript ausführen, bevor Sie diese Frage beantworten.
Philip Brodovsky
Zum Beispiel. in der Hauptdatei server.js auf jeden Fall als konstant ...
Fabrice T
21

Sie können verwenden window.location.pathname.split('/');

Dadurch wird ein Array mit allen Elementen zwischen den / 's erstellt

rauben
quelle
11

Dies funktioniert für tatsächliche Pfade im Dateisystem, wenn Sie nicht über die URL-Zeichenfolge sprechen.

var path = document.location.pathname;
var directory = path.substring(path.indexOf('/'), path.lastIndexOf('/'));
bpeterson76
quelle
var path = document.location.pathname; var dir = path.substring (path.indexOf ('/'), path.lastIndexOf ('/'));
Gtzinos
9

Für beide / und \:

window.location.pathname.replace(/[^\\\/]*$/, '');

Um ohne den abschließenden Schrägstrich zurückzukehren, gehen Sie wie folgt vor:

window.location.pathname.replace(/[\\\/][^\\\/]*$/, '');
David Sherret
quelle
Dies funktioniert in IE <9, während die Antworten mit .lastIndexOf dies nicht tun. +1 aus diesem Grund.
Thunderblaster
8

vollständige URL

Wenn Sie die vollständige URL zB wollen http://website/basedirectory/workingdirectory/Verwendung:

var location = window.location.href;
var directoryPath = location.substring(0, location.lastIndexOf("/")+1);

lokaler Pfad

Wenn Sie den lokalen Pfad ohne Domain zB /basedirectory/workingdirectory/Verwendung:

var location = window.location.pathname;
var directoryPath = location.substring(0, location.lastIndexOf("/")+1);

Falls Sie den Schrägstrich am Ende nicht benötigen, entfernen Sie das +1Nachher location.lastIndexOf("/")+1.

Verzeichnisname

Wenn Sie nur die aktuellen Verzeichnisnamen, in dem das Skript in, zum Beispiel läuft workingdirectoryEinsatz:

var location = window.location.pathname;
var path = location.substring(0, location.lastIndexOf("/"));
var directoryName = path.substring(path.lastIndexOf("/")+1);
flavio.donze
quelle
1
Standort bewirkt, dass Google Chrome die Seite neu
lädt
Hat mir damit viel Zeit gespart! Vielen Dank
Shadoninja
6

Dieser Einzeiler funktioniert:

var currentDirectory = window.location.pathname.split('/').slice(0, -1).join('/')
jbyrd
quelle
Der Versuch, meine Abwahl zu entfernen, aber SO lässt mich nicht, weil ich kürzlich darüber abgestimmt habe. das macht sehr viel Sinn ...
Lev
1

Wenn Sie die vollständige URL zB wollen website.com/workingdirectory/Verwendung: window.location.hostname+window.location.pathname.replace(/[^\\\/]*$/, '');


quelle
0

Ein interessanter Ansatz, um die dirnameaktuelle URL abzurufen, besteht darin, die integrierte Pfadauflösung Ihres Browsers zu verwenden. Sie können dies tun durch:

  1. Erstellen Sie einen Link zum .aktuellen Verzeichnis
  2. Verwenden Sie die HTMLAnchorElementSchnittstelle des Links, um die aufgelöste URL oder den Pfad zu erhalten, der oder der entspricht ..

Hier ist eine Codezeile, die genau das tut:

Object.assign(document.createElement('a'), {href: '.'}).pathname

Im Gegensatz zu einigen anderen hier vorgestellten Lösungen weist das Ergebnis dieser Methode immer einen abschließenden Schrägstrich auf. Wenn Sie es beispielsweise auf dieser Seite ausführen /questions/3151436/, erhalten Sie https://stackoverflow.com/es /.

Es ist auch einfach, die vollständige URL anstelle des Pfads abzurufen. Lesen Sie einfach die hrefEigenschaft statt pathname.

Schließlich sollte dieser Ansatz auch in den ältesten Browsern funktionieren, wenn Sie nicht verwenden Object.assign:

function getCurrentDir () {
    var link = document.createElement('a');
    link.href = '.';
    return link.pathname;
}
raphinesse
quelle