Вопрос

В моей функции пользователь вводит путь, как './images/profile' И мне нужно проверить, такой же текущий путь страницы такой же, как и путь, который он прошел. I. Проверьте, path == location.pathname.

если location.pathname является /scripts И вступил путь ./../parent/scripts Если родитель является родительским каталогом сценариев, сравнение должно вернуть true И это должно вернуться false Если введен путь ./../parent/images и т.д. Так есть ли какой -нибудь метод в JS, чтобы отправить два пути?

Это было полезно?

Решение

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;

должен выполнить задачу. Может быть, регулярность будет короче, но не допускает навигацию в массивах :-)

Другие советы

Там нет встроенного способа сравнения или разрешения путей. Вам придется прибегнуть к анализу струн или какого -то взлома, как загрузка относительного пути в скрытый iframe, и проверить, если его location.href равна текущему окну location.href... не то чтобы я защищаю этот подход.

function comparePath(path1, path2) {
  var path1Dir = path1.substring(path1.lastIndexOf('/'));
  var path2Dir = path2.substring(path2.lastIndexOf('/'));
  return path1Dir == path2Dir;
}

Вы можете получить результат, позвонив: comparePath(path, location.pathname);

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top