Pfade vergleichen
-
27-10-2019 - |
Frage
In meiner Funktion gibt Benutzer einen Pfad wie ein './images/profile'
Und ich muss überprüfen, ob der aktuelle Pfad der Seite dem Weg ist, den er überschritten hat. I. e. prüfe ob path == location.pathname
.
wenn location.pathname
ist /scripts
und der eingegebene Weg ./../parent/scripts
Wenn übergeordnetes übergeordnetes Verzeichnis von Skripten ist, sollte der Vergleich zurückkehren true
Und es sollte zurückkehren false
Wenn der eingegebene Pfad ist ./../parent/images
usw. Gibt es also eine Methode in JS, um zwei Wege zu Comapre?
Lösung
var p = currentpath + inputpath;
var frags = p.split("/");
for (var i=0; i<frags.length; i++) {
if (i>0 && frags[i] == "..") {
frags.splice(i-1, 2);
i -= 2;
} else if (!frags[i] && frags[i][0] == ".") { // removes also three or more dots
frags.splice(i, 1);
i--;
}
}
return frags.join("/") == suggestedpath;
sollte die Aufgabe erledigen. Vielleicht wäre ein Regexp kürzer, aber es erlaubt keine Navigation in Arrays :-)
Andere Tipps
Es gibt keinen integrierten Weg, um Pfade zu vergleichen oder zu lösen. Sie müssen auf die Parsen der Saiten oder eine Art Hack zurückgreifen, wie das Laden des relativen Pfad location.href
ist gleich dem aktuellen Fenster des Fensters location.href
... nicht, dass ich diesen Ansatz befürworte.
function comparePath(path1, path2) {
var path1Dir = path1.substring(path1.lastIndexOf('/'));
var path2Dir = path2.substring(path2.lastIndexOf('/'));
return path1Dir == path2Dir;
}
Sie können das Ergebnis durch Anrufe erzielen: comparePath(path, location.pathname);