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

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

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

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

Q&A

解決済

3回答

1289閲覧

Javascriptの()内のopenがなぜ成立するか。

退会済みユーザー

退会済みユーザー

総合スコア0

JavaScript

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

0グッド

0クリップ

投稿2018/10/02 07:39

JavaScriptの()の中身はhtmlのセレクターのイメージがあったのですが、
下記のコードのopenがhtmlにもcssにもありません。
以下のopenはなぜ成立するんですか?

javaScript

1 $('.faq-list-item').click(function() { 2 var $answer = $(this).find('.answer'); 3 if($answer.hasClass('open')) { 4 $answer.removeClass('open'); 5 // slideUpメソッドを用いて、$answerを隠してください 6 $answer.slideUp(); 7 8 // 子要素のspanタグの中身をtextメソッドを用いて書き換えてください 9 $(this).find("span").text("+"); 10 11 } else { 12 $answer.addClass('open'); 13 // slideDownメソッドを用いて、$answerを表示してください 14 $answer.slideDown(); 15 16 // 子要素のspanタグの中身をtextメソッドを用いて書き換えてください 17 $(this).find("span").text("-"); 18 19 } 20 }); 21});

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

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

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

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

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

guest

回答3

0

ベストアンサー

下記のコードのopenがhtmlにもcssにもありません。

下の方の$answer.addClass('open');で、クラスを追加しています。

投稿2018/10/02 07:42

maisumakun

総合スコア145183

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

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

退会済みユーザー

退会済みユーザー

2018/10/03 02:23

回答ありがとうございます。 addClassでopenを追加して、hasClassでopenを持っているか、確認しているのですね!理解できました! ただ、htmlにopenがないのに、なぜ $answer.removeClass('open');(4行目)をしているのでしょうか?
maisumakun

2018/10/03 02:29

上の方は「if($answer.hasClass('open'))」なので、openが付いたあとで進むコードです。
退会済みユーザー

退会済みユーザー

2018/10/03 02:48

if($answer.hasClass('open'))でhtmlのanswerクラスにopenが追加されるから、removeClassでopenを取っているという意味ですか?
maisumakun

2018/10/03 02:51

いえ、違います。clickのたびにこの関数が呼ばれるので、1回目でaddClassした後に2回目のクリックが行われると、openのある状態となっています。
退会済みユーザー

退会済みユーザー

2018/10/03 04:43

なるほど! クリックするとanswerにopenがつくから、それをremoveClassで取っているわけですね!! ありがとうございました。
guest

0

何かのサンプルコードでしょうか。
以下の部分で動的にセレクタを追加しているので、HTML上になくても成立します。

JavaScript

1$answer.addClass('open');

いわゆる、トグルというものですね(+、-を交互に表示切替え)。
if-elseの中で、"open"を動的に追加・削除しています。
この場合、CSSで使う装飾的な意味のセレクタではなく、
JavaScriptで特定のHTMLにアクセスするための、マーカー的な意味で使っています。

投稿2018/10/02 07:54

take_3306

総合スコア242

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

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

退会済みユーザー

退会済みユーザー

2018/10/03 02:32

回答ありがとうございます。 プログラミングの学習サイトです。 トルグっていうんですね! addClassはhtmlに追加していて、cssは関係ないんですね。
guest

0

ざっくりこんな感じですかね

javascript

1<script> 2$(function(){ 3 $('.faq-list-item').on('click',function() { 4 var flg=$(this).find('.answer').slideToggle().toggleClass('open').hasClass('open'); 5 $(this).find("span").text(flg?"-":"+"); 6 }).find('.answer').addClass('open'); 7}); 8</script> 9<ul> 10<li class="faq-list-item"> 11<span>-</span>faq1 12<ul class="answer"> 13<li>ans1-1</li> 14<li>ans1-2</li> 15<li>ans1-3</li> 16</ul> 17</li> 18<li class="faq-list-item"> 19<span>-</span>faq2 20<ul class="answer"> 21<li>ans2-1</li> 22<li>ans2-2</li> 23<li>ans2-3</li> 24</ul> 25</li> 26<li class="faq-list-item"> 27<span>-</span>faq3 28<ul class="answer"> 29<li>ans3-1</li> 30<li>ans3-2</li> 31<li>ans3-3</li> 32</ul> 33</li> 34</ul>

投稿2018/10/02 08:18

yambejp

総合スコア114747

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

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

退会済みユーザー

退会済みユーザー

2018/10/03 02:35

ご回答ありがとうございます。 いまは読めないですが、jQueryをもっと勉強して詳しくなったら、解読してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問