Сравнение путей
-
27-10-2019 - |
Вопрос
В моей функции пользователь вводит путь, как './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);