求相对路径的思路:
比如
var path1 = "D://su/ni/you/tas/you/d.html";
var path2 = "D://su/ni/you/tas/b.html";
如果相对于path1求path2的相对路径,去掉"D://",将剩下的字符串转为数组。
p1 = ['su','ni','you','tas','you','d.html'] p2 = ['su','ni','you','tas','b.html']
然后for循环,依次比较p1和p2的元素,例子中,p1[4] != p2[4] 那么d.html要向上走p1.length - 4 值为2.
也就是 ../../ 。p2[4] 的值为 b.html 。 将两者进行拼接, ../../b.html 就是path1相对于path2的相对路径。
ps 记得要对盘符进行判断,如果不在同一个盘符,那也就没有相对路径一说了。以下是具体实现代码。
<script> var path1 = "D://su/ni/you/tas/you/d.html"; var path2 = "D://su/ni/you/tas/b.html"; //求path1 相对于 path2 的相对路径。 ../../you/tas/b.html function contrast(p1,p2){ if(p1.substr(0,1).toUpperCase() != p2.substr(0,1).toUpperCase()){ return "不在同一个根目录"; } var arrPath1 = p1.substr(4).split('/'); var arrPath2 = p2.substr(4).split('/'); for(var i=0;i<path1.length;i++){ console.log(i); if(arrPath1[i] != arrPath2[i]){ if(arrPath1.length - i > 1){ var str = ''; for(var j=0;j<arrPath1.length-i;j++){ str += '../'; } str += arrPath2.slice(i).join("/"); } if(arrPath1.length - i == 1){ var str="./"; str += arrPath2[i]; } return str; } } } console.log(contrast(path1,path2)); </script>