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

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

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

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

Q&A

解決済

2回答

5351閲覧

jQueryで要素の追加と削除について

wanikun

総合スコア6

jQuery

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

0グッド

0クリップ

投稿2015/05/10 15:08

すみません、jQueryを勉強していますが、最終手段で質問させて頂きます。
キーワードを追加して削除するだけのものを作りたいのです。
input textから「ほげほげ」と入力して、ボタンを押したら以下のように追加されます。
ほげほげ[×]
そこから〔×〕をクリックしたらその追加したキーワードだけを削除したいのですが、どうしても入力したテキストが「全部削除」されてしまいます。
作ったスクリプトは下記ですが、「for」文などを使わないといけないのでしょうか?

<script> jQuery(function(){ $('#hogeBtn1').click(function(){ var products = $(this); products = $("#products").val(); var add_hoge= $(this); add_hoge = $("#add_hoge").append("<div>"+products+"<span class=\"delete\">×</span></div><br>"); $('.delete').click(function(){ $('span').remove(); $('br').remove(); }); return false; }); }); </script>

■HTML部分
<input title="タイトル" type="search" name="products" id="products" value="" />
<input type="button" value="追加" class="add_btn" id="hogeBtn1">

<div id="add_hoge"> 〜ここにキーワードが追加される。 <div>ほげほげ<span class="delete">×</span></div> </div>

はてなポイントが無くてすみませんがお願い致します。

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

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

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

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

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

guest

回答2

0

ベストアンサー

こんばんは。なんか寝付けなかったんで回答書いてみます。

lang

1$(function () { 2 $(document).on('click', '.delete', function() { 3 var me = $(this), 4 kw = me.closest('div'); 5 kw.remove(); 6 }); 7 $('#hogeBtn1').click(function () { 8 var products = $('#products').val(); 9 $("#add_hoge").append("<div>" + products + "<span class=\"delete\">×</span></div>"); 10 return false; 11 }); 12});
  1. $('.delete') と書くと、ドキュメント内の delete class属性を持つすべてのものを指します。$('span') も $('br') も同様です。全部消えてしまうのはこのせいですね。
  2. なので、次のどちらかを行います。
    2-1. 追加した要素にだけ通用する clickイベントハンドラを記載する。
    2-2. 文書内の .delete class属性要素に共通なロジックを別に記載しておいてそちらで集中管理。

今回は、.delete をクリックしたら行うことはみんな同じなので、後者の実装がよりシンプルですね。2-2を採用します。
$(document).on メソッドで、実装してきます。
3. .delete のspan要素から見て、消したいキーワードは すぐ一つ上の親のdiv要素です。これを知るには
closest('div') が簡単。(ほかにも指定する方法はあります) で、これをremoveすれば OKですね。

以上です。おやすみなさい。

投稿2015/05/10 16:48

okayu3

総合スコア200

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

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

wanikun

2015/05/10 23:28

質問者です。ありがとうございました。説明も書いてくれてわかりやすかったです。 まだ初心者の本を見ての開発だったので.onと.closestについてはこれから調べてみます。 ありがとうございました。
guest

0

こんな感じじゃないでしょうか。

lang

1jQuery(function(){ 2 $('#hogeBtn1').click(function(){ 3 var products = $("#products").val(); 4 $("#add_hoge").append( 5 // 入力値から "<div>"+products+"</div>" のように HTML を構築するのは悪手 6 // .text() を使うほうが良い 7 $('<div></div>') 8 .text(products) 9 .append("<span class=\"delete\">×</span>") 10 ); 11 $("#products").val(""); 12 }); 13 14 // 要素を追加するたびに click イベントハンドラを仕込むのではなく .on() を活用 15 $(document).on('click', '.delete', function(){ 16 // 削除する要素はイベントのターゲットから parent で辿る 17 $(this).parent().remove(); 18 }); 19});

投稿2015/05/10 16:59

編集2015/05/10 17:02
ngyuki

総合スコア4514

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

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

ngyuki

2015/05/10 17:05

okayu3 さんの回答にように `closest()` の方が `parent()` よりもDOM構造の変化に対して強いですね
wanikun

2015/05/10 23:26

質問者です。ありがとうございました。こちらでも無事に稼動致しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問