1

Linux bash スクリプトで見られるような相対パスであるかのように相対 URL である文字列引数を 1 つ取り、それを現在の Web ページの URL と組み合わせて相対リソースを見つける JavaScript 関数を作成するにはどうすればよいですか?現在のウェブページ。

相対 URL の例:

  • file2.html
  • ./file2.html
  • ../foo/file2.html
  • ././file2.html

結果の例:

  1. 基本ケース

  2. 余分な現在のディレクトリ ドット (およびローカル Web ページ)

    • ウェブページ内ファイル:///C:/Users/Me/dir1/dir2/page.html
    • 相対 URL ././foo.html
    • 結果ファイル:///C:/Users/Me/dir1/dir2/foo.html
      • または 2 番目の設定ファイル:///C:/Users/Me/dir1/dir2/././foo.html
  3. 親ディレクトリ (およびいくつかの付随的な余分なドット、および別のローカル Web ページ形式)

    • ウェブページファイル内::///C|/Users/Me/dir1/dir2/anotherpage.html
    • 相対 URL ./../././foo.html
    • 結果ファイル:///C:/Users/Me/dir1/foo.html
      • または 2 番目の設定ファイル:///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 が得られることがわかっている場合は、単純に一時 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 に答える