2012-02-18 73 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