質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

21931閲覧

javascriptの絶対パスについて

ishipp

総合スコア16

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2017/03/20 15:48

編集2017/03/21 06:17

javascriptの絶対パスについて質問させてください。

ファイルの階層は

home/index.html
home/category/contact.html
home/img/aa.jpg
home/img/bb.jpg
home/js/change.js

のようなファイル階層をしていると仮定します。

index.html及びcategory/contact.htmlでは
先にaa.jpgを表示してあります。

1月はaa.jpg 2月はbb.jpg 3月はaa.jpg・・・という月によって画像を変更するjavascriptファイルを作成してるのですが、

画像の絶対パスを取得する仕組みで悩んでます。

var local = window.location; var url = local.origin; function getDir(place, n) { return place.pathname.replace(new RegExp("(?:\\\/+[^\\\/]*){0," + ((n || 0) + 1) + "}$"), "/"); } var pwd = url + getDir(local); // 現在のディレクトリ console.log(pwd);

以上のコードをindex.htmlでコンソールログを確認すると
file:///Users/ユーザー名/Desktop/home/
となり。
この処理のあと、img/bb.jpgを連結する処理を入れて
file:///Users/ユーザー名/Desktop/home/img/bb.jpg
としてsrcタグに代入しております。
そして悩んでいるのは、
category/contact.html上で上の絶対パスを確認したところ
file:///Users/ユーザー名/Desktop/home/category/img/bb.jpg
となりcategory/配下にはimgフォルダがないのでエラーとしてなってしまいます。

file:///Users/ユーザー名/Desktop/home/imgを指定する方法はありますか?

file:///Users/ユーザー名/Desktop/homeはサーバー等の兼ね合いもあり、
動的に変化させたいと思っております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toutou

2017/03/20 16:03

同じURLがないのは気のせいでしょうか?
guest

回答2

0

ベストアンサー

絶対パスと絶対URI

質問にある「絶対パス」は実のところは絶対パスではなく、「絶対URI」が正しい表現と思われます。

カレントディレクトリを得る

JavaScript

1console.log(location.protocol + '//' + location.host + location.pathname);

相対パスを絶対URIに変換する

HTMLAnchorElement#href は絶対URIを返します(HTMLImageElement#src も同様)。

JavaScript

1var a = document.createElement('a'); 2a.href = 'foo.jpg'; // HTMLAnchorElement#href 3console.log(a.href); 4 5var img = new Image; 6img.src = 'foo.jpg'; // HTMLImageElement#src 7console.log(img.src);

URL コンストラクタは window.location と似た Interface を持ちます。

JavaScript

1console.log(new URL('foo.jpg', location.protocol + '//' + location.host + location.pathname).href);

Re: ishipp さん

投稿2017/03/20 16:24

編集2017/03/20 16:38
think49

総合スコア18162

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ishipp

2017/03/21 06:41

回答ありがとうございます。絶対パスの認識の違い。教えて頂きありがとうございます。勉強になりました。 他情報については少々お待ちください。確認後改めて感謝の気持ちを伝えさせて下さい。
ishipp

2017/03/21 07:00

絶対URIから絶対パスを引いたものを取得することはできますか?
think49

2017/03/21 08:58

親記事の「 カレントディレクトリを得る」のコードから pathname を除外すれば可能です。 任意の絶対URIを対象にするなら URL コンストラクタでも同様の事が可能ですね。 この辺りは親記事のリンク先やGoogle検索を駆使すれば情報が出てくるので、調べてみると良いと思います。
ishipp

2017/03/26 06:26

think49様やっと理解できました。ご投稿ありがとうございます。
guest

0

src 属性内は絶対パスである必要はありません。

たとえば home/index.html なら次のように参照します。

html

1<img src="img/aa.jpg" alt="">

category/concat.html からなら次のようにすれば良いです。

html

1<img src="../img/aa.jpg" alt="">

投稿2017/03/20 16:07

chitoku

総合スコア1610

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ishipp

2017/03/21 06:34

回答ありがとうございます。
ishipp

2017/03/21 06:55

category/concat.html だったら、../img/bb.jpg , index.htmlだっら/img/bb.jpgと動的に階層を変更することはできますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問