我的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();
这样可以删除指示的列表项,但它不是“动态的”。
有人可以给我一个提示吗?
答案 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>