2016-06-21 3 views
1

私は、押したときに<button>タグの親divを削除するためにjQueryを使用しようとしています。親divを.remove()で削除します。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"> 
</script> 
<script> 
    $(".remove").click(function(event) { 
     event.preventDefault(); 
     $(this).parents('.li').remove(); 
    }); 
</script> 
<div id="1a"> 
    <input class="versionid" placeholder="Version Number"><button class="add">+</button><button class="remove">X</button><br> 
    <br> 
    <textarea class="textarea" placeholder="Changes"></textarea> 
</div> 

jQueryのコードは全体<div id="1a">ブロックを削除する必要がありますが、何が起こるように思わない:私は、このHTMLコードを持っています。

答えて

1

$(this).parents('.li').remove();のセレクタは、選択しようとしている親を表します。これは$(this).parents('#1a').remove();となりますが、親divのIDが1aであるため、'.li'から'#1a'に変更されています。ここでJSFiddleだ:

また

https://jsfiddle.net/9jLsz6r2/

あなたが複数の削除ボタンを持っている場合、あなたがより簡単かもしれない$(this).parent().remove()を、使用することができ

+0

divに.removeという兄弟があり、idに '#1a'とは異なるIDがあるとしたら、これはうまくいきません - OPに別のHTMLが存在する場合は... –

+0

また' $(this ).parent()... 'は、直接の親でないならば、*失敗となります。 –

+0

1.塩味がありません。 2.現在 '#1a'は' .remove'の兄弟ではありません。親です。同じIDを持つ複数の要素は存在してはいけません。その場合は、名前を変更するかクラスを使用する必要があります。これは適切な解決策ではありません。 3。それは直前の親ではない場合は無効です。正しい要素を選択するまで、 'parent()'をチェーンすることができます。4.このリスナーを別の場所のボタンに使用している場合は、全く同じ。あなたのコメントはあなたの答えに対する私の完全に合理的な提案に対する報復です。 – Jay

1

は削除する... .parents('.li')ので、奇妙な親が存在していないようです。

<div class="YOU DON'T HAVE ANY CLASS" id="1a">  

おそらくhttp://api.jquery.com/closest/

$(this).closest('div').remove(); 

またはむしろあなたのDIVにliクラスを割り当てる:

$(this).closest('.li').remove(); 

のような:

$(".remove").click(function(event) { 
 
    event.preventDefault(); 
 
    $(this).closest('div').remove(); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<div class="li" id="1a"> 
 
    <input class="versionid" placeholder="Version Number"><button class="add">+</button><button class="remove">X</button><br> 
 
    <br> 
 
    <textarea class="textarea" placeholder="Changes"></textarea> 
 
</div>

あなたが有益なコメントからわかるように、おそらくクラスのように、.closest("div")よりもより具体的なセレクタを使用してください:.closest(".parent")あるいは.closest(".li")が、そのクラスを使用してくださいより<div class="li" id="1a">

+0

OPが彼らの変更を望んでいる場合、 '.remove'の兄弟であるdivがある場合、今後のHTML – Jay

+0

**ありがとうございました**。上の点@Wade –

+0

ちょっと言っていますが、OPはJS/HTML/CSSにあまり馴染んでいないようですので、便利です。 – Jay

0

.closest()メソッドを使用するだけです。$(this).closest( '。li')。remove(); これは現在の要素から始まり、一致する要素を探してチェーンを登り、要素が見つかるとすぐに停止します。

.parent()は要素の直接的な親要素、つまり.liにマッチしないdiv.msg-modificationにのみアクセスします。だからあなたが探している要素には決して到達しません。

.closest()(現在の要素をチェックしてからチェーンを登る)以外の解決策は、.parents()を使用しますが、これは警告が見つかるとすぐに停止しないという警告があります(現在の要素はチェックせず、親要素のみをチェックします)。あなたの場合、それは本当に重要ではありませんが、あなたがやろうとしていることに対して.closest()が最も適切な方法です。

関連する問題