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

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

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

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

1581閲覧

jQuery:キャプションの<br>を反映させたい

akinco

総合スコア17

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/10/29 01:14

編集2018/10/30 00:54

前回の質問の続きになります。
jQuery:取得した要素を属性に入れ替えたい

皆様のアドバイスのおかげで、キャプションの二重入力の手間は省くことができました。
しかし、キャプション内に<br>が入ることとなり、ソースをいじってみましたがうまく反映できず困っています。

HTML

1<div class="sp-slide"> 2 <a href="./img/04.jpg" title="オーバーレイ時のキャプション"> 3  <img class="sp-image" src="./img/blank.gif" data-src="./img/04.jpg" data-retina="./img/04.jpg"></a> 4  <p class="sp-layer sp-black sp-padding"> 5   写真4の説明文が入ります<br> 6   写真4の仕様が入ります。 7  </p><!--メイン画像表示中のキャプション--> 8</div>

js

1$(function() { 2 $('p.sp-layer').each(function(index, element) { 3 const target = $(element); 4 target.parent().find('a').prop('title', target.text()); 5 }); 6});

上記の様に”innerHTML"とした場合、画像のようにオーバーレイ時のキャプションはキレイに改行されますが
メイン画像をマウスオーバーした際に表示される説明は<br>も含めてそのまま出力され改行されません。
オーバーレイ時
マウスオーバー時

js

1$(function() { 2 $('p.sp-layer').each(function(index, element) { 3 const target = $(element); 4 target.parent().find('a').prop('title', target.html()); 5 }); 6});

とした場合は、マウスオーバー時が改行され、オーバーレイ時は改行がされません。
説明下手で申し訳ありません。

どちらの動作であっても、改行されるようにしたいのですが
最悪マウスオーバー時に表示される説明を
非表示でも問題ないのでSliderProでその様な設定があれば併せてご教示ください。

質問が長くなりましたが、よろしくお願いいたします。

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

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

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

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

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

x_x

2018/10/29 06:18

<br>の直後には実際に改行コードが入っているのでしょうか?
akinco

2018/10/29 09:06

すみません、<br>の直後とはどの部分のことでしょうか?htmlのことですか?
x_x

2018/10/29 09:10

そうです。提示コードのように改行してますか?
akinco

2018/10/29 14:42

提示コードのように、実際に改行しています。
kei344

2018/10/30 02:41

回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。
akinco

2018/11/06 01:34

ご指摘ありがとうございます。配慮が足らず申し訳ございませんでした。以後気を付けます。
guest

回答3

0

いまの感じだとこんな感じですかね
タグを見せたいのではないならhtmlをひろうのではなくtextを拾う

javascrpt

1<script> 2$(function(){ 3 $('.sp-slide>a').attr('title',function(){ 4 return $(this).next('p').text().replace(/^[ \s]+/mg,""); 5 }); 6}); 7</script> 8<div class="sp-slide"> 9 <a href="./img/04.jpg" title="オーバーレイ時のキャプション"> 10  <img class="sp-image" src="./img/blank.gif" data-src="./img/04.jpg" data-retina="./img/04.jpg"></a> 11  <p class="sp-layer sp-black sp-padding"> 12   写真4の説明文が入ります<br> 13   写真4の仕様が入ります。 14  </p> 15</div>

※先頭にある空白文字と全角スペースを削除

投稿2018/10/29 01:42

yambejp

総合スコア114777

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

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

akinco

2018/10/29 02:23

ご教示ありがとうございます。 申し訳ありません、このコードではキャプションの取得ができませんでした。 しかし、余白部分の置換は参考になりました(*´エ`*)! return this.nextElementSibling.innerHTML.replace(/^[ \s]+/mg,""); とすることで、余分な余白は削除できました。 しかし、<br>はそのままです…
yambejp

2018/10/29 02:29

いや、だからinnerHTMLはだめだって・・・ textContentを拾ってみては? ただ、jQueryつかっているのに戻り値を得るのにピュアなjs使う意味がわかりませんけどね
akinco

2018/10/29 03:50

>yambejp様 仰る通りですね・・・。 jQueryに変更しました。 マウスオーバーはタグ非表示になってさえいればOKのですが オーバーレイさせた時には改行させたいです。 …html()にすれば改行は可能ですが、それだどマウスオーバー時にタグが出てしまうし…
guest

0

title属性やalt属性の仕様なのでそこは外側から制御できないように思います。
試してませんが改行コード ¥n にすれば良いかもしれませんけど。

投稿2018/10/29 01:39

m.ts10806

総合スコア80850

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

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

akinco

2018/10/29 02:23

ご回答ありがとうございます。 「textContent」とした場合のみ、マウスオーバー時がしっかりと改行されるので 外側制御できるのかと思ったのですが…難しいのでしょうか。
guest

0

自己解決

色々試しましたが、解決法は見つかりませんでした。
この質問は閉じたいと思います。
皆様、ありがとうございました。

投稿2018/11/06 01:35

akinco

総合スコア17

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問