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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top