使用JavaScript将相对路径转换为绝对路径

问题描述:

有一个函数,它给了我urls如:

There's a function, which gives me urls like:

./some.css
./extra/some.css
../../lib/slider/slider.css

总是一个相对路径。

让我们认为我们知道页面的当前路径,例如 http://site.com/stats/2012/ ,不知道如何将这些相对路径转换为真正的路径?

Let's think we know current path of the page, like http://site.com/stats/2012/, not sure how do I convert these relative paths to real ones?

我们应该得到如下所示:

We should get something like:

./some.css => http://site.com/stats/2012/some.css
./extra/some.css => http://site.com/stats/2012/extra/some.css
../../lib/slider/slider.css => http://site.com/lib/slider/slider.css

没有jQuery,只有香草javascript 。

No jQuery, only vanilla javascript.

这应该做到这一点:

This should do it:

function absolute(base, relative) {
    var stack = base.split("/"),
        parts = relative.split("/");
    stack.pop(); // remove current file name (or empty string)
                 // (omit if "base" is the current folder without trailing slash)
    for (var i=0; i<parts.length; i++) {
        if (parts[i] == ".")
            continue;
        if (parts[i] == "..")
            stack.pop();
        else
            stack.push(parts[i]);
    }
    return stack.join("/");
}