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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top