2012-02-18 2 views
0

내 함수 사용자가 './images/profile'과 같은 경로를 입력하고 페이지의 현재 경로가 전달 된 경로와 같은지 여부를 확인해야합니다. I. e. path == location.pathname을 확인하십시오. location.pathname/scripts이고 경로 상위 스크립트의 상위 디렉토리 ./../parent/scripts 입력경로 비교

경우 비교 true 반환해야하고 입력 경로 ./../parent/images 등 경우 그렇게 두 경로 comapre하는 JS에서 임의의 방법이있다 false 반환해야 ?

답변

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

예 ................ 올바르지 않습니다. –