🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
jQuery

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

Q&A

解決済

3回答

908閲覧

jQueryで複数の選択肢からクリックした物だけ色を変える ②

WEB_QUESTION

総合スコア2

jQuery

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

0グッド

0クリップ

投稿2021/03/19 01:52

jQueryの勉強中です。
初期状態では赤の4つのboxがありクリックした物だけ色を黒にし、
それと同時にクリックされた物以外は赤にしたいと思っています。

黒になったbox自体もクリックすると赤になる仕様です。

全部赤になるかor一つだけ黒になる。

発生している問題

.removeClassを上手く適応させたい。

該当のソースコード

HTML

1<div class="header"> 2 <div class="box"></div> 3</div> 4<div class="container"> 5 <div class="box"></div> 6</div> 7<div class="sub"> 8 <div class="box"></div> 9</div> 10<div class="footer"> 11 <div class="box"></div> 12</div>

CSS

1.box { 2 width: 100px; 3 height: 100px; 4 background: red; 5 margin: 0 auto 10px; 6} 7.active { 8 background: black; 9}

jQuery

1$(function(){ 2 $('.box').on('click', function () { 3 $(this).siblings().removeClass('active'); 4 $(this).toggleClass('active'); 5 }); 6});

試したこと

先ほど同一階層にboxがある場合を教えていただいたのですが
別の場合もどなたかご教授いただけますと幸いでございます。

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

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

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

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

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

m.ts10806

2021/03/19 02:03

前の質問の私の回答のコメントに書いた内容では対応できませんか? 自身以外removeClass →自身をtoggleClass
ku__ra__ge

2021/03/19 02:04

> 発生している問題 > .removeClassを上手く適応させたい。 それは問題ではなく要望です。今回の場合は、発生している問題は「クリックした要素以外が赤に戻らない」ことではないですか?
WEB_QUESTION

2021/03/19 03:39

質問の仕方など上手くなく申し訳ございません。 次回ご質問するときは問題点をもっと明確にしてご質問いたします。
guest

回答3

0

ベストアンサー

親が同一階層なら、前回の応用で、

js

1$(function(){ 2 $('.box').on('click', function () { 3 $(this).parent().siblings().children('.box').removeClass('active'); 4 $(this).toggleClass('active'); 5 }); 6});

下記だと同一階層でなくても有効です。

js

1$(function(){ 2 $('.box').on('click', function () { 3 $('.box').not(this).removeClass('active'); 4 $(this).toggleClass('active'); 5 }); 6});

投稿2021/03/19 02:10

編集2021/03/19 02:15
hatena19

総合スコア34073

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

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

m.ts10806

2021/03/19 02:19

前回notもコメントで追加してたんですけど読まれなかったみたいで残念
hatena19

2021/03/19 02:24

あら、気が付きませんでした。
WEB_QUESTION

2021/03/19 03:34

この度もご丁寧に有難うございます。 現在制作しているものが階層がもっと深いのですが メソッドの繋ぎ方など参考にして制作したら上手く動くようになりました。
FKM

2021/03/19 04:06

敢えてnotは要らない気はしますけどね。 3行目で指定したクラスに対しactiveクラスを付与している操作をしているわけですし。
hatena19

2021/03/19 04:19

notがないと、下記の仕様に対応できないと思います。 > 黒になったbox自体もクリックすると赤になる仕様です。 > 全部赤になるかor一つだけ黒になる。
FKM

2021/03/19 04:24

了解です。
guest

0

siblingsは同一階層にある同一クラスの他のものに対し作用するものなので、
現在別クラスの親を持っている限りは、一度遡る必要があります。

<script> $(function(){ $('.box').on('click', function () { $(this).parents().find('.box').removeClass('active'); //親階層に戻り、そこから.boxを探す $(this).toggleClass('active'); }); }); </script>

投稿2021/03/19 02:14

FKM

総合スコア3647

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

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

WEB_QUESTION

2021/03/19 03:29

階層の繋げ方など初心者にわかるように丁寧に有難うございます。 .siblings()を入れたら現在制作しているものに上手く適応できました。
guest

0

$(this).siblings()this兄弟要素を取得します。
質問に提示されたhtmlでは各boxは兄弟要素を持っていないのでremoveClass('active')を実行しても何も起きません。
以下のように各boxが兄弟要素になるようにhtmlを変更してみてください。

html

1<div> 2 <div class="box"></div> 3 <div class="box"></div> 4 <div class="box"></div> 5 <div class="box"></div> 6</div>

投稿2021/03/19 02:07

ku__ra__ge

総合スコア4524

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

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

WEB_QUESTION

2021/03/19 03:45

兄弟要素ではない場合の仕様が教わりたい内容でした。 次回はもっと質問を明確にいたします。 この度はご返答有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問