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

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

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

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

jQuery

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

310閲覧

アコーディオン機能をつけるコードへの理解が出来ない。

Akaho

総合スコア39

JavaScript

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

jQuery

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

HTML

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

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/06/01 12:29

編集2019/06/01 12:34

progateでjquery中級コースを学習しています。アコーディオン機能をつけることを学んでいるのですが、
スライド説明を見ても理解出来ないところがあるので、噛み砕いてどういう理由でこのコードが必要なんだみたいに教えて欲しいです。

javascript

1コード 2$('.faq-list-item').click(function(){ 3 var $answer=$(this).find('.answer'); 4 if($answer.hasClass('open')){ 5 $answer.removeClass('open'); 6 }else{ 7 $answer.addClass('open'); 8 } 9 });

課題はリンク内容です。
リンクの質問文に書かれている『回答を得て、まだ理解出来ずにいる点』を見て下さい。
『$answerにはopenクラスがないから、hasClassでtrue,falseをそもそも判定できない(trueがない)と考えることしか理解出来ないです』。
まず、アコーディオンをつけるとクリックしたら隠れていた内容が出てくることは理解出来ています。
1、
var $answer=$(this).find('.answer');の部分で理解の仕方が正しいか教えて下さい
理解の仕方 (変数varがあるのは.answerクラスが複数あるから。)
2、
全く理解出来ないと感じる部分
hasClassメソッドは$answerにopenクラスがあるかないかを判定するものだけど、
今回、$answerにはどこのコードを見てもない。だからif文で判定したとしても、全部openがないパターンしかない。
そのため、openがあればremoveClassをとっての部分は成立しないんじゃ?と感じる。理解出来ないです。
イメージ説明
この説明を見たんですが理解出来なかったです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

1、
var $answer=$(this).find('.answer');の部分で理解の仕方が正しいか教えて下さい
理解の仕方 (変数varがあるのは.answerクラスが複数あるから。)

「.answer」というidの要素を探し(find)、「$answer」という変数(var)に入れている。

2、
全く理解出来ないと感じる部分
hasClassメソッドは$answerにopenクラスがあるかないかを判定するものだけど、
今回、$answerにはどこのコードを見てもない。だからif文で判定したとしても、全部openがないパターンしかない。
そのため、openがあればremoveClassをとっての部分は成立しないんじゃ?

1度目はそのとおりで、if文のelseに流れます。
そこで1で取得した変数を使って$answer.addClass('open');が実行され、「open」クラスを追加しています。
これにより、2度目に同じif文に来た場合はif文がtrueになります。
そこでremoveClassが実行されると、最初の状態に戻ります。

投稿2019/06/01 12:43

gentaro

総合スコア8949

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

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

Akaho

2019/06/02 02:29

ということは、elseの場所にremoveClass、if文の中にaddClassを逆にして入れてもアコーディオン機能を付けようと思えばできると理解して大丈夫ですか? Progateで試しにやってみて出来なかったんですが、それはpro gate の仕様と違うという理由から無理なのか、まだ理解が足りてないのかわからないです
Akaho

2019/06/02 04:31

elseの場所にremoveClass、if文の中にaddClassを逆にして入れてもアコーディオン機能を付けようと思えばできると理解して大丈夫ですか? →間違いだと気づきました。これではいつになってもopenクラスがつかないと気づきました。
Akaho

2019/06/02 04:42

分かりやすく教えて下さってありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問