1

如何编写一个 javascript 函数,它采用一个字符串参数,它是一个相对 url,就好像它是一个相对路径,例如您可能在 Linux bash 脚本中看到的,并将它与当前网页的 url 结合以查找相对于的资源当前网页。

相对网址示例:

  • 文件2.html
  • ./file2.html
  • ../foo/file2.html
  • ././file2.html

示例结果:

  1. 基本情况

  2. 多余的当前目录点(和本地网页)

    • 在网页文件中:///C:/Users/Me/dir1/dir2/page.html
    • 相对网址 ././foo.html
    • 结果文件:///C:/Users/Me/dir1/dir2/foo.html
      • 或第二个偏好文件:///C:/Users/Me/dir1/dir2/././foo.html
  3. 父目录(以及一些偶然多余的点,以及另一种本地网页格式)

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

3 回答 3

1

你可以试试URI js 库

试试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"
于 2012-05-12T16:56:03.480 回答
1

如果你知道访问锚的href 属性总是给你绝对 URL,你可以简单地创建一个临时的并读取属性:

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

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

演示

于 2012-05-12T17:06:52.540 回答
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("/");
}

​演示:http: //jsfiddle.net/h22SA/

应用到当前页面,您应该使用:

makePath(location.href, "././foo.html")
于 2012-05-12T17:01:48.317 回答