2012-02-18 5 views
0

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

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

ответ

1
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

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

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

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

+0

Это даст ложную положительный результат при сравнении любых путей, которые заканчиваются в общепризнанном подкаталоге, например 'foo/bar' и' fizz/bar'. –

+0

ya ................ Неправильно –

Смежные вопросы