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

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

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

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

Q&A

解決済

1回答

1042閲覧

javascriptで特定のclassをもつ要素すべてに個別のclickイベントを追加したい

Seiichi4421

総合スコア13

JavaScript

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

0グッド

0クリップ

投稿2019/01/05 09:57

自動連携なCollapseがほしい

プレーンjavascriptで可変表示できる要素を作成しようと思い、w3schoolsのHow TO - Collapseを手本に試行錯誤中です。
今までは対象idのdisplayを操作する関数を定義してonclick="func(id)"で呼び出すというようなことをしていましたが、手作業で一つ一つidを書くのはあまり好ましくないと思ったため、今回のようにボタンと操作先が自動で連携されるようにしようとしています。
目標は操作元・操作先のn番目の要素がidなどを用いずに(htmlのコード量を抑えて)連携されることです。

該当のソースコード

html

1<article> 2 <p><a class="hidden3">aaaa</a></p> 3 <div class="hidden3in">いぇい</div> 4 <p><a class="hidden3">aaaa</a></p> 5 <div class="hidden3in">いぇい</div> 6 <p><a class="hidden3">aaaa</a></p> 7 <div class="hidden3in">いぇい</div> 8</article>

javascript

1document.addEventListener('DOMContentLoaded', function() { 2 var colla = document.getElementsByClassName("hidden3"); 3 var collb = document.getElementsByClassName("hidden3in"); 4 for (var i=0; i<collb.length; i++) { 5 collb[i].style.display = "none"; 6 colla[i].addEventListener('click', function(){ 7 collb[i].style.display = (collb[i].style.display=='block')?'none':'block'; 8 }); 9 }; 10});

補足

要素がちゃんと非表示になっているためcollb[i].style.display = "none";までは機能しているようですが、肝心のclickイベントの追加でコケている感じです。
w3schoolsのほうではthis.nextElementSiblingを使っていますが、私の用途では操作対象の要素が直後に来ない場合が多々あり、それ故に今までidで操作先を明記せざるを得ませんでした。
.aクラスの3番目の要素で.bクラスの4番目の要素を操作するようなことはありません。ひとつの<p></p>にそれぞれが1つずつ入る感じですのでfor文で書きました。

当方js初心者ですので何卒よろしくおねがいします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

js

1// for (var i=0; i<collb.length; i++) { 2// ↓ 3 for (let i=0; i<collb.length; i++) {

【【JavaScript入門】letとvarの使い方とスコープの違い | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト】
https://www.sejuku.net/blog/58429

投稿2019/01/05 10:06

kei344

総合スコア69407

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

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

Seiichi4421

2019/01/05 10:21

letに書き換えたところうまくいきました。 スコープをもう一度勉強しなおしたいと思います。 ご回答ありがとうございますm(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問