如何使用jQuery删除父元素

时间:2011-07-11 08:48:06

标签: javascript jquery parent

我的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();

这样可以删除指示的列表项,但它不是“动态的”。

有人可以给我一个提示吗?

7 个答案:

答案 0 :(得分:107)

只需使用.closest()方法:$(this).closest('.li').remove();
它从当前元素开始,然后爬上链寻找匹配元素,并在找到匹配元素后立即停止。

.parent()仅访问元素的直接父级,即div.msg-modification.li不匹配。所以它永远不会达到你想要的元素。

.closest()之外的另一个解决方案(检查当前元素然后爬上链)将使用.parents() - 但是,这会有一个警告,即它一发现就不会停止匹配元素(它不会检查当前元素,而只检查 父元素)。在你的情况下,它并不重要,但对于你想要做的事情.closest()是最合适的方法。


另一件重要的事情:

从不对多个元素使用相同的ID。这是不允许的,并导致非常难以调试的问题。从链接中删除id="191",如果您需要在点击处理程序中访问ID,请使用$(this).closest('.li').attr('id')。实际上如果你使用data-id="123"然后.data('id')而不是.attr('id')来访问它会更加清晰(所以你的元素ID不需要像(数据库?)行那样的任何ID )

答案 1 :(得分:16)

使用unwrap()

怎么样?
<div class="parent">
<p class="child">
</p>
</div>

使用后 - $(".child").unwrap() - 它将是;

<p class="child">
</p>

答案 2 :(得分:15)

使用parents()代替parent()

$("a").click(function(event) {
  event.preventDefault();
  $(this).parents('.li').remove();
});

答案 3 :(得分:6)

删除父级:

$(document).on("click", ".remove", function() {
       $(this).parent().remove(); 
});

删除所有父母:

$(document).on("click", ".remove", function() { 
       $(this).parents().remove();
});

答案 4 :(得分:0)

$('#' + catId).parent().remove('.subcatBtns');

答案 5 :(得分:0)

您还可以使用此:

$(this)[0].parentNode.remove();

答案 6 :(得分:0)

我偶然发现了这个问题一个小时。一个小时后,我尝试调试,这有所帮助:

$('.list').on('click', 'span', (e) => {
  $(e.target).parent().remove();
});

HTML:

<ul class="list">
  <li class="task">some text<span>X</span></li>
  <li class="task">some text<span>X</span></li>
  <li class="task">some text<span>X</span></li>
  <li class="task">some text<span>X</span></li>
  <li class="task">some text<span>X</span></li>
</ul>