完成当前网页的相对URL

时间:2012-05-12 16:47:31

标签: javascript uri

如何编写一个javascript函数,它接受一个相对url的字符串参数,就好像它是一个相对路径,就像你在Linux bash脚本中看到的那样,并将它与当前网页的url结合起来找到一个相对于当前网页的资源。

相对网址的示例:

  • file2.html
  • ./ file2.html
  • ../富/ file2.html
  • ././ file2.html

示例结果:

  1. 基本情况

  2. 超额当前目录点(和本地网页)

    • 在网页文件中:/// C:/Users/Me/dir1/dir2/page.html
    • relative url ././ foo.html
    • 结果文件:/// C:/Users/Me/dir1/dir2/foo.html
      • 或第二首选项文件:/// C:/Users/Me/dir1/dir2/././foo.html
  3. 父目录(以及一些偶然的多余点和另一种本地网页格式)

    • 在网页文件中:/// C | /Users/Me/dir1/dir2/anotherpage.html
    • relative url ./../././ foo.html
    • 结果文件:/// C:/Users/Me/dir1/foo.html
      • 或第二个偏好文件:/// C:/Users/Me/dir1/dir2/./../././foo.html

3 个答案:

答案 0 :(得分:1)

您可以尝试URI js library

在那里尝试relativeToabsoluteTo个功能。

例如:

var uri = new URI("../../foo.html");
var newUri = uri.absoluteTo("file://C:/Users/Me/dir1/dir2/page.html"); 
// newUri == "file://C:/Users/Me/foo.html"

答案 1 :(得分:1)

如果您知道访问锚的href 属性总是为您提供绝对URL,您只需创建一个临时URL并阅读该属性:

function to_absolute_url(relative) {
    var a = document.createElement('a');
    a.href = relative;
    return a.href;
}

这当然只有在您要完成的URL始终是当前页面的URL时才有效。

DEMO

答案 2 :(得分:0)

以下是可行的通用解决方案:

function makePath(path, rel) {
    path = path.substring(0, path.lastIndexOf("/") + 1) + rel;
    var dirs = path.split("/");
    var result = [];
    for (var i = 0; i < dirs.length; i++) {
        if (dirs[i] == ".") continue;
        if (dirs[i] == "..") result.pop();
        else result.push(dirs[i]);
    }
    return result.join("/");
}

DEMO: http://jsfiddle.net/h22SA/

申请当前页面时应使用:

makePath(location.href, "././foo.html")