Signatur
Beschreibung
getParent() gehört zur File and Directory Entries API. Die Methode gibt nichts direkt zurück. Das übergeordnete Verzeichnis eines FileSystemFileEntry oder FileSystemDirectoryEntry kommt über einen Callback an. Du brauchst sie vor allem, wenn du in einem per Drag & Drop abgelegten Ordner (über DataTransferItem.webkitGetAsEntry()) oder in einer Ordnerauswahl mit <input type="file" webkitdirectory> (über webkitEntries) nach oben navigieren willst.
Die API arbeitet nur mit Callbacks und nicht mit Promises. In moderner Codebasis packt man den Aufruf deshalb meist in ein Promise, damit man async/await nutzen kann. Der Erfolgs-Callback bekommt den Eltern-Eintrag. Der Fehler-Callback bekommt eine DOMException.
Wichtig: Beim Wurzelverzeichnis des virtuellen Dateisystems liefert getParent() das Wurzelverzeichnis selbst. Beim Hochlaufen erkennst du das Ende also daran, dass fullPath des Elternteils gleich "/" bzw. gleich dem aktuellen Pfad ist, und nicht an null.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $successCallback | (parent: FileSystemDirectoryEntry) => void | Wird mit dem übergeordneten FileSystemDirectoryEntry aufgerufen. Formal optional, ohne ihn ist der Aufruf aber sinnlos. |
|
| $errorCallback | (error: DOMException) => void | Wird aufgerufen, wenn das Elternverzeichnis nicht ermittelt werden kann, z. B. weil der Eintrag nicht mehr existiert oder der Zugriff verweigert wird. |
Rückgabewert
successCallback.Beispiele
Elternordner einer per Drag & Drop abgelegten Datei ermitteln
const dropZone = document.querySelector('#drop');
dropZone.addEventListener('dragover', (e) => e.preventDefault());
dropZone.addEventListener('drop', (e) => {
e.preventDefault();
const entry = e.dataTransfer.items[0]?.webkitGetAsEntry();
if (!entry) return;
entry.getParent(
(parent) => console.log(`${entry.name} liegt in: ${parent.fullPath}`),
(err) => console.error('Elternordner nicht ermittelbar:', err.name)
);
});
Promise-Wrapper für async/await
const getParentAsync = (entry) =>
new Promise((resolve, reject) => entry.getParent(resolve, reject));
// Nutzung, z. B. im drop-Handler:
const logParent = async (entry) => {
try {
const parent = await getParentAsync(entry);
console.log('Eltern:', parent.name || '(Wurzel)', parent.isDirectory);
} catch (err) {
console.error(err);
}
};
Pfad bis zur Wurzel hochlaufen
const getParentAsync = (entry) =>
new Promise((resolve, reject) => entry.getParent(resolve, reject));
const ancestors = async (entry) => {
const chain = [];
let current = entry;
while (true) {
const parent = await getParentAsync(current);
// Die Wurzel ist ihr eigener Elternteil, also hier abbrechen
if (parent.fullPath === current.fullPath) break;
chain.push(parent.fullPath);
current = parent;
}
return chain;
};
// Für einen Eintrag /projekt/src/index.js:
// ancestors(fileEntry).then(console.log);
// Wichtig · Fallstricke
- Wurzel-Sonderfall: Für das Wurzelverzeichnis liefert
getParent()das Wurzelverzeichnis selbst und nichtnull. Schleifen, die nach oben laufen, brauchen eine eigene Abbruchbedingung, sonst laufen sie endlos. - Keine Promises: Die Methode arbeitet nur mit Callbacks. Ein direktes
await entry.getParent()gibt einfachundefinedzurück. - Begrenzter Sichtbereich: Du kommst nur bis zur Wurzel des virtuellen Dateisystems, das der Browser für den Drop bzw. die Auswahl anlegt. Echte Pfade des Betriebssystems bleiben aus Sicherheitsgründen verborgen.
- Kompatibilität: Die API ist nicht standardisiert und nur teilweise umgesetzt. Chromium-Browser unterstützen sie vollständig, Firefox und Safari nur mit Einschränkungen. Prüfe die aktuelle Kompatibilitätstabelle, bevor du dich auf
getParent()verlässt. Für neue Projekte mit Lese- und Schreibzugriff ist die File System Access API bzw. das Origin Private File System (FileSystemHandle) meist die bessere Wahl. - Die Einträge gelten nur, solange das Drop- bzw. Auswahl-Ereignis den Zugriff erlaubt. Hebe
DataTransferItem-Objekte nicht über das Ereignis hinaus auf, sondern hole die Einträge synchron im Handler.