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

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

詳細はこちら
JavaScript

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

HTML

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

Q&A

解決済

1回答

585閲覧

JavaScriptで動的に生成した要素を指定する方法

hebikirai

総合スコア1

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2021/02/06 23:52

編集2021/02/07 03:28

前提・実現したいこと

htmlで作成したbtnAをクリックすると、JavaScriptによって更にボタンが生成され、そのボタンをクリックすると別の要素が追加されるプログラムを作っています。

html
□btnA
□□(btnB1)【カッコ内は生成した要素】
□□□(div1)
□□□(div2)
□□□(div3)
□□(btnB2)
□□□(div1)
□□□(div2)
□□□(div3)
□□(btnB3)
□□□(div1)
□□□(div2)
□□□(div3)

JavaScript
□1.btnAをクリックするごとにbtnBが1つ生成される
□2.btnBをクリックするごとにdivが1つずつ生成される

生成したbtnBにidをループでつけていくところまでは分かったのですが、生成したbtnBをidで指定する方法が分かりません。
クリックしたbtnBの下にだけdivを追加し、他のbtnBには影響がないようにしたいです。
btnBをidで指定するにはループによって数字が付加されているため、書き方が分かりません。
idではなく、btnB全部に同じクラスをつけてthisで指定したほうがよいのでしょうか。

よろしくおねがいします。

該当のソースコード

html

1<div id="btnA">//btnAをクリックして生成されたbtnB 2 btnA 3</div> 4<div>//btnBparent 5 <div id="btnB1"> 6 btnB1//←このボタンを指定したい 7 </div> 8 <div>//btnB1brother 9 //btnB1をクリックすると生成されるbtnB1brotherの中身のdiv 10 <div id="div1"></div> 11 <div id="div2"></div> 12 <div id="div3"></div> 13 </div> 14</div>

JavaScript

1$(document).on('click', '#ボタンA', function () { 2 i=1; 3 var btnBparent = document.createElement('div'); 4 var btnB = document.createElement('div'); 5 var btnBbrother = document.createElement('div'); 6 $(btnB).attr({class:'btnB',id:'btnB'+i}); 7 i++; 8 btnBparent.appendChild(btnB); 9 btnBparent.appendChild(btnBbrother); 10 //btnBをクリック 11 //※この指定方法が分かりません 12 $(document).on('click', '☆btnB?☆', function () { 13 //div1,2,3を生成 14 var btnBbrotherchild = document.createElement('div'); 15 btnBbrotherchild.appendChild(btnBbrotherchild(div1)); 16 }); 17});

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

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

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

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

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

m.ts10806

2021/02/07 00:36

「例」が多すぎてイメージがわきづらいかと。 もっと具体的な値にしたうえで想定する結果と要件を記載されたほうが良いと思います。
plasticgrammer

2021/02/07 00:55

> それともボタンB全部に同じクラスをつけてthisで指定したほうがよいのでしょうか こちらで作れるなら、そのほうがイベント追加が一括でできるので楽かと思います。 提示いただいているコードは不足している処理もありそうです。 現状でどこまでできていて、何が問題となっているかを再度明記したほうが、回答しやすくなると思います。
hebikirai

2021/02/07 03:29

質問文を修正しました。
guest

回答1

0

ベストアンサー

javascript

1<script> 2document.addEventListener('click',e=>{ 3 const t=e.target; 4 if(t.id=="btnA"){ 5 t.parentNode.append( 6 Object.assign(document.createElement('div'),{textContent:"ボタンB","className":"btnB"}) 7 ); 8 } 9 if(t.classList.contains("btnB")){ 10 t.parentNode.insertBefore( 11 Object.assign(document.createElement('div'),{textContent:"C"}),t.nextElementSibling 12 ); 13 } 14}); 15</script> 16<div id="btnA">ボタンA</div> 17

投稿2021/02/07 02:53

yambejp

総合スコア116661

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

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

hebikirai

2021/02/11 02:51

考えていたとおりに動きました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問