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

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

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

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

jQuery

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

Q&A

解決済

2回答

3958閲覧

画像をそのaltの文字列に置き換えたい

castail

総合スコア117

JavaScript

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

jQuery

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

0グッド

1クリップ

投稿2016/03/11 03:26

編集2016/03/11 04:07

画像の代わりに<span>タグでそのaltの文字列に置き換えたいです。

具体的には、

lang

1<div class="hoge"> 2<img src="hoge_a.gif" alt="ユニークな文字列1"> 3<img src="hoge_b.gif" alt="ユニークな文字列2"> 4<img src="hoge_c.gif" alt="ユニークな文字列3"> 5<img src="hoge_d.gif" alt="ユニークな文字列4"> 6<img src="hoge_e.gif" alt="ユニークな文字列5"> 7<img src="hoge_f.gif" alt="ユニークな文字列6"> 8</div>

この構成から以下に変更したいです。

lang

1<div class="hoge"> 2<span>ユニークな文字列1</span> 3<span>ユニークな文字列2</span> 4<span>ユニークな文字列3</span> 5<span>ユニークな文字列4</span> 6<span>ユニークな文字列5</span> 7<span>ユニークな文字列6</span> 8</div>

ページ全体ではなく、hoge内のimgのみ対象です。
hogeは複数存在するため、各hogeごとで処理を完結したいです。
imageの数は可変で、画像名・文字列はそれぞれ規則性はありません。

こちらをjqueryで処理する方法をご教授願えればと思います。

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

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

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

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

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

sounisi5011

2016/03/11 03:31

ページ内にある全てのimg要素が対象ですか?それとも、hogeクラスが付いた要素内のimg要素のみが対象ですか?
castail

2016/03/11 03:32

早速のご回答ありがとうございます。 説明が不足し申し訳ございません。「hoge」内のimgのみが対象です。
guest

回答2

0

ベストアンサー

JavaScript

1/** 2 * hogeクラスが付いた要素内にある、alt属性の存在するimg要素を取得し、 3 * .each()メソッドで各要素に対して処理をおこなう。 4 * 参考:http://api.jquery.com/each/ 5 */ 6$('.hoge img[alt]') 7 .each(function() { 8 /* 置き換え元のimg要素 */ 9 var elem = $(this); 10 /* alt属性の値 */ 11 var altAttr = elem.attr('alt'); 12 /* 置き換えるspan要素。内容のテキストにalt属性値を指定 */ 13 var replaceElem = $('<span>', { 14 // alt属性値をテキストとして指定 15 // Note: このように指定しないと、alt属性値にHTMLとして有効な文字列が混入した場合にHTMLとして処理されてしまう 16 text: altAttr 17 }); 18 19 /** 20 * alt属性値が空文字列(内容がない文字列)の場合、置き換えない 21 */ 22 if (altAttr !== '') { 23 /** 24 * img要素をspan要素に置き換え 25 * 参考:http://bl6.jp/web/javascript/replacewith-replaceall/ 26 */ 27 elem.replaceWith(replaceElem); 28 } 29 });

サンプル(JS Bin):http://output.jsbin.com/hurene
コード(JS Bin 編集画面):http://jsbin.com/hurene/edit?html,js

hogeクラスの付いた要素内にある、alt属性の指定されたimg要素全てに対する置き換え処理を行うコードになります。
alt属性値にHTMLタグが紛れ込んでいても、普通のテキストとして置き換えられるようになっています。

なお、alt属性が省略された場合や、内容が空文字列の場合は置き換えないようになっています。

投稿2016/03/11 04:11

編集2016/03/11 04:26
sounisi5011

総合スコア697

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

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

castail

2016/03/11 07:11

ご回答ありがとうございます。 こちらの内容で実現できました! 感謝いたします。 ありがとうございました。
guest

0

JavaScript

1 $.each($('#hoge').find('img'), function(i, e) { 2 $('#hoge').append('<span>' + $(e).attr('alt') + '</span>'); 3 $(e).remove(); 4 })

こんな感じでどうでしょう。

投稿2016/03/11 03:54

tkanda

総合スコア2425

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

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

castail

2016/03/11 04:06

早速のご回答誠にありがとうございました。 spanへの置き換えは問題なくできました!ありがとうございます。 ただこの#hogeがページ内に複数あるため全hoge内に全てのhogeの<span>が全て入っている状態です。 この点お伝え漏れで誠に申し訳ございません。 この場合はどうなりますでしょうか? 後出しの条件で恐縮ですが、ご教授いただければ幸いです。
sounisi5011

2016/03/11 04:13

そのコードですと、alt属性値にHTMLタグとして有効な文字が紛れ込んでいた場合に、HTMLとして認識されてしまうものと思われます…
castail

2016/03/11 04:18

度々すいません。こちら解決しました!お騒がせし申し訳ありません。ありがとうございました!
tkanda

2016/03/11 04:21

複数存在している #hoge のうちの特定の一つだけを対象としてこの処理を実行したい、ということでしょうか。 例えば $('#hoge').get(0).find(...) のように修正すればページ内の最初の #hoge だけを対象にすることができます。どの #hoge を対象にするかは、ルールがあると思いますので、それに沿ってセレクタ部分を工夫すればいいのではないでしょうか。 sounisi5011 さんが指摘されていることも、考慮されればベターだと思います。
castail

2016/03/11 07:14

#hoge全てにそれぞれ処理を加えたいです。 しかしsounisi5011さんの記述の応用でこちらうまくいきました。 そのためベストアンサーはそちらにさせて頂きます。 せっかくご教授頂いたにも関わらず恐縮ですがご了承くださいませ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問