2012-02-18 84 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'。 – 2012-02-18 07:51:08

+0

ya ................這是不正確的 – 2012-02-19 20:08:06