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

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

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

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

Q&A

解決済

2回答

1025閲覧

jQueryにて、class名をクリック操作で変更したい

Yui_note

総合スコア15

jQuery

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

0グッド

0クリップ

投稿2021/08/14 19:19

前提・実現したいこと

jQueryにて、ボタンクリックをする度にclass属性の値を変更したいと思っているのですが、
以下のコードで試してみておりますがうまく動きません。
クリックでクラス名を変更する方法をご教授いただけますと幸いです。

試したこと

ボタン要素を「icon-heart」クラスで作成し、removeClassとaddClassでクリック時には「icon-heartFill」のクラス名に、クリックされていない状態の時は「icon-heart」 のままにしたいのですが、以下のコードでは動きませんでした。
原因となり得そうな部分の検討がつかず、どのように記述すると良いか教えていただきたいです。
よろしくお願いいたします。

HTML

1<button type="button" aria-label="お気に入り" data-tooltip="お気に入り" aria-pressed="false" class="icon a-icon like-icon icon-heart a-icon-size_medium"></button>

jQuery

1$(function(){ 2 $(".like-icon").click(function(){ 3 if($(this).attr("class")=="icon-heart"){ 4 $(this).removeClass("icon-heart").addClass("icon-heartFill");} 5 else{ 6 $(this).removeClass("icon-heartFill").addClass("icon-heart");} 7 }); 8});

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

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

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

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

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

guest

回答2

0

ベストアンサー

(都合により削除)

イメージ説明

投稿2021/08/14 21:11

編集2021/10/08 21:39
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yui_note

2021/08/15 01:08

ありがとうございます。 サンプルまで作成していただき大変ありがたいです。m いただいたサンプルで実装したい動きはできたのですが、 ただtoggleを使う形ですと一度クラス名を削除してから追加が行われる様でして、 もともと入っているクラス名の順番が変更されてしまいます。 クラス名を一度削除することなく、クラス名のみを変更することは可能でしょうか..。
maisumakun

2021/08/15 01:09

> もともと入っているクラス名の順番が変更されてしまいます。 クラスの順番はCSSやセレクタの動作に関係しません。よほど特殊な実装をしていない限り、クラスの順序を気にする必要はありません。
Yui_note

2021/08/15 01:17

ありがとうございます。 確かに仰る通りだと思います。ただ機能的なところの意味合いではなく、クリック動作でクラス名のみを変更しているサイトがありまして、どうやって実装しているのか疑問に思いご質問させていただいた次第です。 実装されていたサイト:https://note.com/(ハートマークのボタンをクリックした際のクラス名変更の動き部分になります) もう少し調べてみます!
maisumakun

2021/08/15 01:20

attr('class')やprop('className')を使えば、クラス設定の文字列全体が取得できます。それの必要部分を書き換えて書き戻せば、位置もそのまま動かすことは可能です。
Yui_note

2021/08/15 01:33

ありがとうございます。 attr('class')やprop('className')で書き換えできないか試してみます。m
退会済みユーザー

退会済みユーザー

2021/10/08 21:40 編集

(都合により削除)
退会済みユーザー

退会済みユーザー

2021/10/08 21:40 編集

(都合により削除)
Yui_note

2021/08/15 05:42

> suwmn50799 さん ありがとうございます! いただいたコードでやりたいことができました! replaceを使う方法とても勉強になります。m 「/\b」「\b/」こういったコードはエスケープシーケンスでしょうか、、バックスペースの余白も入れるんですね。やりたいことは完璧にできたのですが、ただせっかくいただいたコード解読できるところまでは至っていないので、しっかり理解して次に進みたいと思います! 本当にご親切にありがとうございました。m
退会済みユーザー

退会済みユーザー

2021/10/08 21:40 編集

(都合により削除)
Yui_note

2021/08/16 17:55

参考サイトまでご紹介いただきありがとうございます! あのコードは単語境界を表していたんですね、とても勉強になります。m ご紹介いただいた参考サイトで残りのコード部分も解読してみたいと思います。 本当にありがとうございました!m
guest

0

.attr() だと属性値を全部持ってきませんか?(要デバッグ)

「特定のクラスがある」なら.hasClass()を使ってください。

投稿2021/08/14 20:44

m.ts10806

総合スコア80861

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

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

Yui_note

2021/08/15 01:08

ありがとうございます。m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問