Jspにリストアイテムタグがいくつかあります。各リスト項目には、deleteというリンク(「a」タグ)を含むいくつかの要素が含まれています。必要なのは、リンクをクリックしたときにリストアイテム全体を削除することです。
コードの構造は次のとおりです。
$("a").click(function(event) {
event.preventDefault();
$(this).parent('.li').remove();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<li id="191" class="li">
<div class="text">Some text</div>
<h4><a href="URL">Text</a></h4>
<div class="details">
<img src="URL_image.jpg">
<span class="author">Some info</span>
<div class="info"> Text
<div class="msg-modification" display="inline" align="right">
<a name="delete" id="191" href="#">Delete</a>
</div>
</div>
</div>
</li>
しかし、これは機能しません。私はjQueryが初めてなので、たとえば次のようなことを試しました。
$(this).remove();
これは機能し、クリックするとリンクが削除されます。
$("#221").remove();
これは機能し、指定されたリスト項目を削除しますが、「動的」ではありません。
誰かが私にヒントを与えることができますか?
.closest()
メソッドを使用するだけです:$(this).closest('.li').remove();
現在の要素から開始し、チェーンを登って一致する要素を探し、見つかったらすぐに停止します。
.parent()
は、要素のdirect親、つまりdiv.msg-modification
と一致しない.li
のみにアクセスします。したがって、探している要素には到達しません。
.closest()
(現在の要素をチェックしてからチェーンを登る)以外の別の解決策は .parents()
を使用することです-ただし、これはすぐには停止しないという警告があります一致する要素を見つけるため(現在の要素はチェックせず、only親要素)あなたの場合、それは本当に重要ではありませんが、あなたがやろうとしていることのために.closest()
が最も適切な方法です。
NEVER複数の要素に同じIDを使用します。それは許可されておらず、非常にデバッグしにくい問題を引き起こします。リンクからid="191"
を削除し、クリックハンドラーでIDにアクセスする必要がある場合は、$(this).closest('.li').attr('id')
を使用します。実際には、data-id="123"
を使用し、.data('id')
の代わりに.attr('id')
を使用してアクセスすると、さらにきれいになります(したがって、要素IDは(データベース?)行のIDに似ている必要はありません)
nwrap() の使用はどうですか
<div class="parent">
<p class="child">
</p>
</div>
使用後-$(".child").unwrap()
-なります;
<p class="child">
</p>
parents()
の代わりにparent()
を使用します。
$("a").click(function(event) {
event.preventDefault();
$(this).parents('.li').remove();
});
親を削除:
$(document).on("click", ".remove", function() {
$(this).parent().remove();
});
すべての親を削除します。
$(document).on("click", ".remove", function() {
$(this).parents().remove();
});
これも使用できます:
$(this)[0].parentNode.remove();
$('#' + catId).parent().remove('.subcatBtns');