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

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

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

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

5838閲覧

CSSのbackground-imageのURLのスラッシュが何故か消えてしまう問題について

y_natsui

総合スコア49

JavaScript

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2016/04/23 14:12

<a href="//test.html" target="_top" style="opacity:1; background-image:url({img_src});"></a>

上記の様なHTMLがあったとして、JavaScriptから置換の処理を行って、{img_src}の部分を任意のURLに設定したいのですが、どうしてもスラッシュが消えた状態のURLに置換されてしまいます。どなたか解決法をご存知の方がいらっしゃいましたら、教えて頂けますと幸いです。

実際の行いたいことを下記に順を追って説明致します。

・まず変数にHTMLを下記の様にバッククォートでHTMLを囲って代入する。

javascript

1var REPLACE_HTML_STRING = `<a id="replace_a_tag" href="//test.html" target="_top" style="opacity:1; background-image:url({img_src});"></a>` 2

・正規表現を使って、{img_src}を探しだして、置換処理をする

javascript

1var regExp = new RegExp('{img_src}', 'g'); 2var temp_html = ''; 3var img_src = '//element_1/element_2/test.png'; 4temp_html = REPLACE_HTML_STRING.replace(regExp, img_src); 5(任意のtargetに対して).innerHTML = temp_html;

・上記実装済みのテストページを確認すると、background-imageのURLの「/」スラッシュが消えた状態になり、画像が表示されない

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

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

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

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

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

guest

回答2

0

ベストアンサー

【Create a new fiddle - JSFiddle】
https://jsfiddle.net/63vkh79c/

テストしてみましたが、消えません。何か別のコードなどに影響されていたりしませんか?


追記:

【Create a new fiddle - JSFiddle】
https://jsfiddle.net/ky8p42fg/


追記2:

''の中に""があり、それが二重になってたからそこの解釈がブラウザでぶれてそうなったと見た。

JavaScript

1var a = '<a href="" style="background: url("//example.com/a.png")">a</a>'; 2```3```JavaScript 4var a = '<a href="" style="background: url(`//example.com/a.png`)">a</a>';

【Create a new fiddle - JSFiddle】
https://jsfiddle.net/0uz0m075/

上記のようにバッククオートで記述するか、下記のように連結するかどちらかですね。

JavaScript

1'<a href="" style="background: url(' + "'//example.com/a.png'" + ')">a</a>';

投稿2016/04/23 14:32

編集2016/04/24 14:06
kei344

総合スコア69398

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

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

y_natsui

2016/04/23 15:23

ご回答ありがとうございます。 console.log(temp_html);これを出力した際は自分の方でも消えないことはこちらでも確認済みでございます。temp_htmlの状態ではなく、最終的なアウトプットの結果を知りたいと思っております。 jQuery( '.tg' ).text( temp_html ); に関してjQueryの.text()を使用しておりますが、純粋なJSで書いた際の状態をお試しいただくことは可能でしょうか? 個人的には最後の代入する処理の所で、innerHTMLで処理するのか、それともinnerTextで処理するのかで挙動が違ってくるのかなと、思っていたりするのですがいかがでしょうか?
kei344

2016/04/23 16:17 編集

追記しました。
flat

2016/04/24 09:12

To: y_natsui 横から失礼致します。 ダブルスラッシュ(//)を先頭に加えている理由(意図)を聞きしても良いでしょうか? ちなみに私もコードを試してみましたが、最終的な出力においてスラッシュは消えませんでした。
kei344

2016/04/24 09:16 編集

To: flatさん プロトコル(スキーム)を省略した記法かと思います。 【リンクの`http:`や`https:`を省略して現在のプロトコルでリンク先にアクセスさせる - Qiita】 http://qiita.com/arai-wa/items/d9b73539898d658b58c5
y_natsui

2016/04/24 09:16

>>flatさん ダブルスラッシュはhttpとhttps両方に対応する為のものですね。こうすると環境に応じて、httpとhttpsが置き換わって処理されるはずです。 なるほどー。確かに頂いたテストページだと消えませんね。 もう少し他に原因が無いかこちらでも探ってみます。
kei344

2016/04/24 09:18

スラッシュだけ消える場合はちょっとわかりませんが、innerHTMLに空要素(<a></a>など)を代入しても反映されない挙動は想定できます。
flat

2016/04/24 09:27 編集

やはりプロトコル(スキーム)の省略ですよね。 初めて知りましたが、相対URLのような書き方でも機能するのですね。
y_natsui

2016/04/24 13:34 編集

これが実際のコードなのですが、以下の通りバグってしまうんですよね。 temp_htmlに代入するまでは正常に表示されているみたいなのですが、 target.innerHTML = temp_htmlをすると、下記の様になってしまうみたいです。 <a href="http://www.yahoo.co.jp/rd?ep=dxEMLiBN4hiGyDX1UOEn_hrxo.0GUUMlOR4RIrAaFEN…1&r=10&rfm=2&sfid=107531&skwid=0&tlid=0&u=_OTHER_&yads_ds=31531_107587&v=2" target="_top" style="opacity:1; background-image:url("//im.c.yimg.jp/res/imstorage-prod-1001135369/images/15/58636c359093283e35b19ad63e2c1aef.jpg");"></a> ↓ <a href="http://www.yahoo.co.jp/rd?ep=dxEMLiBN4hiGyDX1UOEn_hrxo.0GUUMlOR4RIrAaFEN…7531&amp;skwid=0&amp;tlid=0&amp;u=_OTHER_&amp;yads_ds=31531_107587&amp;v=2" target="_top" style="opacity:1; background-image:url(" im.c.yimg.jp="" res="" imstorage-prod-1001135369="" images="" 15="" 58636c359093283e35b19ad63e2c1aef.jpg");"=""></a> エスケープ周りの問題ですかね。。。
kei344

2016/04/24 13:51 編集

×「&」が「&amp;」に変換されているので、多分どこかで別の処理を挟んでますね。 訂正:再現しました。 https://jsfiddle.net/ad0swpLu/
kei344

2016/04/24 13:56

わかったー!
y_natsui

2016/04/24 14:06

本当ですか!? どの辺りが問題の可能性が高そうでしょうか?
kei344

2016/04/24 14:06

すいません、追記してあります。
y_natsui

2016/04/24 14:10 編集

追記ありがとうございます。試してみます!
y_natsui

2016/04/24 16:25

ダブルクォートが問題でした。ありがとうございます。 助かりました!
kei344

2016/04/24 16:30

いえいえ、解決できてよかったです。ひとまずお疲れ様でした。
guest

0

気休めですが…
{img_src} をもっと単純な文字列にしてみてはいかがでしょうか?

投稿2016/04/23 15:03

takasima20

総合スコア7458

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

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

y_natsui

2016/04/23 15:27

現状で、{img_src}は直接の原因ではないと考えております。 上記のサンプルではbackground-imageのみの場合で、単純化しておりますが実際にはaタグのhrefの箇所であったりも{a_tag_html}などの様に実装していても適切に置換処理が行えていたので、何故最終的なアウトプットでbackground-imageだけがスラッシュが消えてしまうのかその理由が知りたいと思っている次第でございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問