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

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

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

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

HTML

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

Q&A

解決済

2回答

597閲覧

Ajaxを使用して画像を表示させる方法

Mario_11

総合スコア95

JavaScript

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

HTML

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

0グッド

1クリップ

投稿2021/04/12 04:10

編集2021/04/13 06:38

Ajaxを使用して画像を表示させる方法が知りたいです。

下記のように文字でLike or UnLikeの表示はできたのですが、textの場所を画像に変更したいのですが、どうすればいいのでしょうか?
https://icons.getbootstrap.com/icons/heart/
上記リンクの画像を入れたいと思っているのですが可能でしょうか?

textの箇所を変更すると思いますが、調べ方が分からず質問いたしました。
よろしくお願いいたします。

javascript

1 <script> 2 $('.like-form').submit(function(e){ 3 e.preventDefault() 4 5 const post_id = $(this).attr('id') 6 7 const likeText = $(`.like-btn${post_id}`).text() 8 const trim = $.trim(likeText) 9 10 const url = $(this).attr('action') 11 12 let res; 13 const likes = $(`.like-count${post_id}`).text() 14 const trimCount = parseInt(likes) 15 16 $.ajax({ 17 type: 'POST', 18 url: url, 19 data: { 20 'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val(), 21 'post_id':post_id, 22 }, 23 success: function(response) { 24 if(trim === 'Unlike') { 25 $(`.like-btn${post_id}`).text('Like') 26 res = trimCount - 1 27 } else { 28 $(`.like-btn${post_id}`).text('Unlike') 29 res = trimCount + 1 30 } 31 32 $(`.like-count${post_id}`).text(res) 33 }, 34 error: function(response) { 35 console.log('error', response) 36 } 37 }) 38 }) 39 </script>

追記
アイコン部分の処理

html

1 <div class="card-content"> 2 <form action="{% url 'app:like-post-view' %}" method="POST" class='like-form' id='{{item.id}}'> 3 {% csrf_token %} 4 <input type="hidden" name="post_id" value={{item.id}}> 5 <button type="submit" class="ui button like-btn{{item.id}}"> 6 {% if user not in item.liked.all %} 7 <i class="bi bi-heart"></i><div class="like-count{{item.id}}"></div> 8 {% else %} 9 <i class="bi bi-heart-fill like"></i><div class="like-count{{item.id}}"></div> 10 {% endif %} 11 </button> 12 </form> 13 <div class="like-count{{item.id}}">{{item.num_likes}}</div> 14 {% if item.post_user.icon %} 15 <a href="#" class="card-link" href="{% url 'app:user_detail' item.post_user %}"> 16 <img src="{{ item.post_user.icon.url }}" width="20%"> 17 {% endif %} 18 {{ item.post_user }} 19 </a> 20 </div>

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

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

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

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

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

m.ts10806

2021/04/12 04:11

アイコンフォントなら既定の取り込み方は書かれてると思いますが、あえて外部から取得するのはなぜでしょう
guest

回答2

0

text()で書き換えている文字をhtml($('<img>'))的な処理にしてみては?

投稿2021/04/12 04:51

yambejp

総合スコア116734

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

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

0

ベストアンサー

他の方の回答にもありますが、 .text('Like') のように設定している部分を .html('ハートアイコンのタグ') に変えればよいです。

Like / Unlike の状態に応じて画像を切り替えるサンプルを以下に示します。

diff

1 if(trim === 'Unlike') { 2- $(`.like-btn${post_id}`).text('Like') 3+ $(`.like-btn${post_id}`).html('<i class="bi bi-heart"></i>') 4 res = trimCount - 1 5 } else { 6- $(`.like-btn${post_id}`).text('Unlike') 7+ $(`.like-btn${post_id}`).html('<i class="bi bi-heart-fill"></i>') 8 res = trimCount + 1 9 }

続いて、if の処理を見直します。
先ほどの修正で「Like」「Unlike」の文字を消したため、 if(trim === 'Unlike') の判定が狂ってしまいます。
ですので、追加で以下のような修正を加えます。

(1) ハートアイコンに「like」クラスを追加
(2) 「like」クラスの有無で処理を分岐させる

diff

1- const likeText = $(`.like-btn${post_id}`).text() 2- const trim = $.trim(likeText) 3+ const hasLike = $(`.like-btn${post_id}`).find('i').hasClass('like') 4 5 (中略) 6 7- if(trim === 'Unlike') { 8+ if(hasLike) { 9 $(`.like-btn${post_id}`).html('<i class="bi bi-heart"></i>') 10 res = trimCount - 1 11 } else { 12- $(`.like-btn${post_id}`).html('<i class="bi bi-heart-fill"></i>') 13+ $(`.like-btn${post_id}`).html('<i class="bi bi-heart-fill like"></i>') 14 res = trimCount + 1 15 }

ちなみに、質問文には submit 時の javascript しか載っていませんが、初期表示のときの HTML も
<i class="bi bi-heart"></i>
または
<i class="bi bi-heart-fill like"></i>
を表示するように直さなければなりません。

--

以上です。
何か分からないことなどあれば、またコメントください。

投稿2021/04/13 05:01

shinoharat

総合スコア1685

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

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

Mario_11

2021/04/13 06:16

知識不足のため回答された処理が分からず止まっていたので助かりました! 無事動かす事が出来ました!ありがとうございます! 一つ質問がございます。 ボタンの中にアイコンが入っていのですが、見た目を良くするためボタンを消したり、アイコンだけの表示で動かすことを可能でしょうか?
shinoharat

2021/04/13 06:39

可能です。 例えば、以下の記事の方法を使えば、ボタンの見た目を普通の文字みたいにできます。 button要素のcssをリセットしたい - Qiita https://qiita.com/nabettu/items/1593af04e48444c45c53 もちろん、このままだと、すべてのボタンの見た目が変わってしまいますから、適用範囲を限定させる工夫は必要です。 CSS の知識があれば簡単です。 もし無いなら・・・頑張って勉強してください。 とりあえずチャレンジしてみて、どうしても難しかったらまた別途質問を投稿されると良いでしょう。
shinoharat

2021/04/13 06:45

別案ですが、 (1) 画面上にはアイコンだけ表示しておく (2) 「アイコンがクリックされたとき、 from の submit イベントを発火させる」という javascript を書く という方法もあります。 (こっちの方がメジャーなやり方かも?) お好きな方でどうぞ。
Mario_11

2021/04/14 03:05

ありがとうございます!別案のメジャーなやり方を作っていきたいと思います。 解説いただきありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問