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

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

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

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

Q&A

3回答

1984閲覧

divに生成したボタンと文の削除を行うボタン

unity0520

総合スコア14

jQuery

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

0グッド

0クリップ

投稿2019/05/22 02:04

<h1>にあるClick Me!ボタンをクリックすることで、YEAHという文と右横にXボタンを<div>に追加し、Xボタンをクリックすることでその文とXボタンを削除するものを作りたいと考えています。

しかし、Click Me!ボタンを複数回クリックし、複数の文とXボタンを追加すると、Xボタンの動作がうまくいきません。
クリックしたXボタンとそれ以降の文とXボタンがすべて削除されてしまいます。

指定した文だけ削除する方法をご教授いただきたいです。
よろしくお願いします。

JQuery

1<!DOCTYPE html> 2<html> 3 <head> 4 </head> 5 <body> 6 <h1 class="btn-area"> 7 <button class="click">Click Me!</button><br/> 8 </h1> 9 <h2> 10 </h2> 11 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 12 <script> 13 $('.click').click(function(){ 14 $('h2').append('<div>YEAH <button class="bb">X</button></div>'); 15 $('.bb').click(function(){ 16 var index = $('.bb').index(this); 17 $('div').eq(index).remove(); 18 index = 0; 19 }); 20 }); 21 </script> 22 </body> 23</html> 24

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

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

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

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

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

guest

回答3

0

こういう処理です

javascript

1<script> 2$(function(){ 3 $('.click').on('click',function(){ 4 $('h2').append($('<div>YEAH <button class="bb">X</button></div>')); 5 }); 6 $('h2').on('click','.bb',function(){ 7 $(this).closest('div').remove(); 8 }); 9}); 10</script> 11<h1 class="btn-area"><button class="click">Click Me!</button><br/></h1> 12<h2></h2>

投稿2019/05/22 02:30

yambejp

総合スコア114769

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

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

miyabi_takatsuk

2019/05/22 02:32

これ一番スマートな気がしますね。
yasutomi

2019/05/22 03:37

$(this).parents('div').remove()や $(this).parent().remove()でも可能ですね。 append内のHTMLが変わらない前提であれば 直近の親要素を取得するclosest('div')が最適解ですね。
guest

0

推測なのですが、.clickボタンのclickイベントの際に.bbに対するイベントが付与されていっているため、作った要素と.bbのクリックが紐づいてしまったのではないかと思います。
同じ文言なので見えづらいので、例えば連番をつけてみたりすると挙動が確認できると思います。

js

1 2var id = 0; 3$('.click').click(function(){ 4 $('h2').append('<div>YEAH'+id+'<button class="bb">X</button></div>'); 5 id++; 6 $('.bb').click(function(){ 7 var index = $('.bb').index(this); 8 $('div').eq(index).remove(); 9 index = 0; 10 }); 11});

2つのクリックイベントを独立させると良いと思います。
ただ「動的要素のクリック」なので呼び出し方が変わります。

js

1var id = 0; 2$('.click').on('click',function() { 3 $('h2').append('<div>YEAH'+id+'<button class="bb">X</button></div>'); 4 id++; 5}); 6 7$(document).on('click','.bb',function() { 8 var index = $('.bb').index(this); 9 $('div').eq(index).remove(); 10}); 11

※ちゃんと押した番号が消えるかという確認のために連番振っています。

投稿2019/05/22 02:24

m.ts10806

総合スコア80850

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

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

0

まず、JavaScriptの処理だろうと、h2にdivを入れるのはよろしくありません。
spanがいいかなーと思います。(見た目は、CSSで調整すればいい)
さて、回答に関してですが、
追加したDOMに対して、削除対象を、クラスのついた同じインデックスのDOMではなく、
自分の親を削除する、クリックイベントを追加で解決できるでしょう。
下記でいかがでしょうか。

html

1<!DOCTYPE html> 2<html> 3 <head> 4 </head> 5 <body> 6 <h1 class="btn-area"> 7 <button class="click">Click Me!</button><br/> 8 </h1> 9 <h2> 10 </h2> 11 <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> 12<script> 13$('.click').click(function(){ 14 $('h2').append('<span>YEAH <button class="bb">X</button></span>'); 15 $('.bb').click(function(){ 16 $(this).parent().remove(); 17 }); 18}); 19</script> 20 </body> 21</html>

投稿2019/05/22 02:18

編集2019/05/22 02:19
miyabi_takatsuk

総合スコア9528

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

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

m.ts10806

2019/05/22 04:26

文字サイズだけの問題ならdivにfont-sizeかければいいのに、とは思いました。
miyabi_takatsuk

2019/05/22 04:37

mts10806さん>確かにw 文字サイズだけのために要素使うのって、HTML3時代を彷彿させますね。 font要素思い出しましたw
m.ts10806

2019/05/22 04:40

たぶん学校の授業とかで「個人ホームページ作ろう」とかのやつですね。 そのころMARQUEEとかよくやってました。
miyabi_takatsuk

2019/05/22 04:46

これはなついwww blink要素とかもありましたよね。 ちなみに、面白いのが、 blink htmlで検索すると、 Googleの検索結果画面でも、点滅します。 Googleがこんなことを見逃すとは思えないのでお茶目でそのままにしてる気がしますw
m.ts10806

2019/05/22 04:49

>blink htmlで検索すると おお、これはすごい。 MARQUEEのほうだと検索結果がスクロールしてますね。 「そのままにしている」というか「意図して入れた」ようにも思います。 CSSアニメーションかかってますし。
miyabi_takatsuk

2019/05/22 04:52

おお、なるほどですね。 お茶目ではなく、よりわかりやすいようにとの工夫なのですね。 さすがGoogleですな。
m.ts10806

2019/05/22 04:56

んーというより「ネタに走った」と言ってもいいかもしれません。 廃止前にどうだったかまで覚えてないのでなんとも言えませんが。
miyabi_takatsuk

2019/05/22 05:02

w ネタに走ったという方が面白いのでそうだと信じたいですね。 自身の仕事においても、面白いことできるならやるって精神忘れないようにしたい、って思っちゃいました。
m.ts10806

2019/05/22 05:05

まあエイプリルフールとか何の節目とかネタを色々仕込むので「おっ」て思わせたいのかもしれませんね。 仕事でも根詰めてばかりでは逆に生産性も悪くなるので、どこかに余裕は持っときたいですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問