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?

War es hilfreich?

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);

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top