Confrontare i percorsi
-
27-10-2019 - |
Domanda
Nella mia funzione l'utente inserisce un percorso come './images/profile'
E devo verificare se il percorso corrente della pagina è uguale al percorso che ha superato. Cioè. Verificare se path == location.pathname
.
Se location.pathname
è /scripts
e il percorso è entrato ./../parent/scripts
Laddove il genitore è directory genitore degli script, il confronto dovrebbe restituire true
E dovrebbe tornare false
Se il percorso inserito è ./../parent/images
ecc. Quindi c'è qualche metodo in JS per comporre due percorsi?
Soluzione
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;
dovrebbe fare l'attività. Forse un regexp sarebbe più breve, ma non consente la navigazione in array :-)
Altri suggerimenti
Non esiste un modo incorporato per confrontare o risolvere i percorsi. Dovrai ricorrere ad analizzare le corde o una sorta di hack come caricare il percorso relativo in un iforame nascosto e controllare se è location.href
è uguale alla finestra corrente location.href
... Non che io stia sostenendo quell'approccio.
function comparePath(path1, path2) {
var path1Dir = path1.substring(path1.lastIndexOf('/'));
var path2Dir = path2.substring(path2.lastIndexOf('/'));
return path1Dir == path2Dir;
}
Puoi ottenere il risultato chiamando: comparePath(path, location.pathname);