Сравнение путей - PullRequest
       31

Сравнение путей

0 голосов
/ 18 февраля 2012

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

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

Ответы [ 3 ]

1 голос
/ 18 февраля 2012
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;

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

1 голос
/ 18 февраля 2012

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

0 голосов
/ 18 февраля 2012
function comparePath(path1, path2) {
  var path1Dir = path1.substring(path1.lastIndexOf('/'));
  var path2Dir = path2.substring(path2.lastIndexOf('/'));
  return path1Dir == path2Dir;
}

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

...