Comparación de caminos
-
27-10-2019 - |
Pregunta
En mi función, el usuario ingresa una ruta como './images/profile'
Y necesito verificar si la ruta actual de la página es la misma que la ruta que pasó. Es decir. verificar si path == location.pathname
.
si location.pathname
es /scripts
y el camino entró ./../parent/scripts
Donde el padre es el directorio principal de los scripts, la comparación debe devolver true
y debería volver false
Si la ruta ingresada es ./../parent/images
etc. Entonces, ¿hay algún método en JS para combinar dos caminos?
Solución
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;
debería hacer la tarea. Tal vez un regexp sea más corto, pero no permite la navegación en matrices :-)
Otros consejos
No hay una forma incorporada de comparar o resolver rutas. Tendrás que recurrir a analizar las cuerdas, o algún tipo de hack como cargar el camino relativo en un iframe oculto y verificar si es location.href
es igual a la ventana actual location.href
... No es que esté abogando por ese enfoque.
function comparePath(path1, path2) {
var path1Dir = path1.substring(path1.lastIndexOf('/'));
var path2Dir = path2.substring(path2.lastIndexOf('/'));
return path1Dir == path2Dir;
}
Puede obtener el resultado llamando: comparePath(path, location.pathname);