如果子元素不存在,则删除父元素

时间:2018-07-17 07:31:00

标签: jquery

我有几个 td ,其类别为 .container 。我想删除整个 td.container (如果它不包含链接 a.tickets )。在下面的示例中,这将是第二个td。

<td class="container">
<span>date info</span>
<a href="#" class="tickets">one</a>
</td>
<td class="container">
<span>date info</span>
</td>

我当时正在考虑使用以下方法检查该类是否存在,但无法正常工作。我需要添加什么来忽略那些具有 .ticket 类的内容?还可以.closest删除此对象或.parent吗?

if($("td.container a.tickets").length < 0)
{
something like .closest('td').remove();
}

3 个答案:

答案 0 :(得分:3)

要实现此目的,您可以结合使用sed -ie -z 's/Marker\n/# Marker Comment\nMarker\n/g' myfile.txt :not()选择器,如下所示:

:has()
$('td.container:not(:has(.tickets))').remove();

答案 1 :(得分:0)

您可以结合使用jQuery .filter()和简单的querySelector()

$('td.container').filter((_, e) => !e.querySelector('a.tickets')).remove();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td class="container">
      <span>date info</span>
      <a href="#" class="tickets">one</a>
    </td>
    <td class="container">
      <span>date info</span>
    </td>
  </tr>
</table>


编辑:由于 @Rory McCrossan 已经为您提供了更简单的答案,因此,这仅是Java脚本的答案,原因是:

document.querySelectorAll('td.container').forEach(e => {if(!e.querySelector('a.tickets')) e.remove();});

答案 2 :(得分:0)

普通JS,只是因为它不比jQuery难/读

https://developer.mozilla.org/en-US/docs/Web/API/ChildNode/remove

document.querySelectorAll('td.container').forEach(function(ele) {
 if (ele.querySelector('a.tickets') == null) ele.remove(); // not jQuery
});
<table>
  <tr>
    <td class="container">
      <span>date info</span>
      <a href="#" class="tickets">one</a>
    </td>
    <td class="container">
      <span>date info</span>
    </td>
  </tr>
</table>