最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

compare path and get relative path between two files with javascript - Stack Overflow

programmeradmin3浏览0评论

How pare dynamically two paths in the same domain and get the relative path between them?

var path2 = ".jpg" // test example
var path3 = ".jpg" // test example

And get a return path2 to path3 for example = "../../img/"

How pare dynamically two paths in the same domain and get the relative path between them?

var path2 = "http://site/test1/test2/img/1.jpg" // test example
var path3 = "http://site/test1/img/1.jpg" // test example

And get a return path2 to path3 for example = "../../img/"

Share Improve this question asked Jun 23, 2013 at 17:00 SergioSergio 28.8k11 gold badges89 silver badges132 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 15

A better way would be to use path.relative

const path = require('path');
const path2 = "http://example./test1/test2/img/1.jpg";
const path3 = "http://example./test1/img/1.jpg";

const relativePath = path.relative(path.dirname(path2),path.dirname(path3));
console.log(relativePath); //'../../img'

Unfortunately, JavaScript has no native method for doing this. But the path module in node.js has! This code has been taken from the node.js path module source code

function relative(from, to) {
    function trim(arr) {
      var start = 0;
      for (; start < arr.length; start++) {
        if (arr[start] !== '') break;
      }

      var end = arr.length - 1;
      for (; end >= 0; end--) {
        if (arr[end] !== '') break;
      }

      if (start > end) return [];
      return arr.slice(start, end - start + 1);
    }

    var fromParts = trim(from.split('/'));
    var toParts = trim(to.split('/'));

    var length = Math.min(fromParts.length, toParts.length);
    var samePartsLength = length;
    for (var i = 0; i < length; i++) {
      if (fromParts[i] !== toParts[i]) {
        samePartsLength = i;
        break;
      }
    }

    var outputParts = [];
    for (var i = samePartsLength; i < fromParts.length; i++) {
      outputParts.push('..');
    }

    outputParts = outputParts.concat(toParts.slice(samePartsLength));

    return outputParts.join('/');
}
发布评论

评论列表(0)

  1. 暂无评论