La comparaison des chemins
-
27-10-2019 - |
Question
Dans mon utilisateur fonction des entrées comme un chemin './images/profile'
et je dois vérifier si le chemin actuel de la page est le même que le chemin qu'il a passé.
C'est à dire. vérifier si path == location.pathname
.
si location.pathname
est /scripts
et le chemin entré ./../parent/scripts
où parent est le répertoire parent des scripts, la comparaison doit revenir true
et il devrait revenir false
si le chemin INTRODUIT est ./../parent/images
etc.
Donc, est-il une méthode de JS pour comapre deux chemins?
La solution
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;
devrait faire la tâche. Peut-être un regexp serait plus court, mais il ne permet pas la navigation dans des tableaux: -)
Autres conseils
Il n'y a pas intégré moyen de comparer ou de chemins résoudre. Vous devrez recourir à l'analyse syntaxique des chaînes, ou une sorte de hack comme le chargement du chemin relatif dans une iframe cachée et vérifier si son location.href
est égale à la location.href
de la fenêtre en cours ... pas que je préconise cette approche.
function comparePath(path1, path2) {
var path1Dir = path1.substring(path1.lastIndexOf('/'));
var path2Dir = path2.substring(path2.lastIndexOf('/'));
return path1Dir == path2Dir;
}
Vous pouvez obtenir le résultat en appelant: comparePath(path, location.pathname);