如何使用jQuery删除父元素
我在我的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();
工程,删除指定的列表项,但它不是“dynamic”。
有人可以给我一个小费?
只需使用.closest()
方法: $(this).closest('.li').remove();
它从当前元素开始,然后爬上链寻找一个匹配的元素,并立即停止,find一个。
.parent()
只访问元素的直接父元素,即与.li
不匹配的.li
div.msg-modification
。 所以它永远不会达到你正在寻找的元素。
除了.closest()
(它检查当前元素,然后爬上链)之外的另一个解决scheme是使用.parents()
– 但是,这将有一个警告,它不会停止,只要它发现一个匹配的元素它不检查当前元素,但只检查父元素)。 在你的情况下,它并不重要,但是对于你正在做的事情.closest()
是最合适的方法。
另一件重要事情:
永远不要使用相同的ID多个元素。 这是不允许的,并导致非常难以debugging的问题。 从链接中删除id="191"
,如果需要访问点击处理程序中的ID,则使用$(this).closest('.li').attr('id')
。 实际上,如果你使用data-id="123"
,然后使用.data('id')
而不是.attr('id')
来访问它(因此你的元素ID不需要类似于任何ID (数据库?)行有)
使用parents()
而不是parent()
:
$("a").click(function(event) { event.preventDefault(); $(this).parents('.li').remove(); });
那么使用unwrap()
<div class="parent"> <p class="child"> </p> </div>
使用后 – $(".child").unwrap()
– 它会;
<p class="child"> </p>
$('#' + catId).parent().remove('.subcatBtns');
删除父项:
$(document).on("click", ".remove", function() { $(this).parent().remove(); });
删除所有父母:
$(document).on("click", ".remove", function() { $(this).parents().remove(); });