2012-02-18 6 views
0

私の関数では、ユーザーは'./images/profile'のようなパスを入力します。ページの現在のパスがパスしたパスと同じかどうかを確認する必要があります。 I.e. path == location.pathnameを確認してください。 location.pathname/scriptsで、パスは親がスクリプトの親ディレクトリである./../parent/scriptsを入力しパスを比較する

場合、比較はtrueを返す必要がありますし、入力したパスが./../parent/imagesなど であれば、それはので、2つのパスを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

ya ................正しくありません –

関連する問題