如果包含的子 div 为空,则删除整个父 div

Remove whole parent div if contained child div is empty

我正在努力实现以下目标:

我有多个 div,每个 class“et_pb_row_inner”包含两列。每个列都包含一个带有 class“et_pb_text”的文本容器。

这是基本的 html:

<div class="et_pb_row_inner">
   <div class="et_pb_column"><div class="et_pb_text"></div></div>
   <div class="et_pb_column"><div class="et_pb_text"></div></div>
</div>

<div class="et_pb_row_inner">
   <div class="et_pb_column"><div class="et_pb_text"></div></div>
   <div class="et_pb_column"><div class="et_pb_text"></div></div>
</div>

<div class="et_pb_row_inner">
   <div class="et_pb_column"><div class="et_pb_text"></div></div>
   <div class="et_pb_column"><div class="et_pb_text"></div></div>
</div>

我需要一种方法来检查每行第二列中的文本是否为空,如果是,则删除整行。像这样:

<div class="et_pb_row_inner">
   <div class="et_pb_column"><div class="et_pb_text">HAS TEXT</div></div>
   <div class="et_pb_column"><div class="et_pb_text">HAS TEXT</div></div>
</div>

<div class="et_pb_row_inner"> <!-- second column text empty, remove whole row -->
   <div class="et_pb_column"><div class="et_pb_text">HAS TEXT</div></div>
   <div class="et_pb_column"><div class="et_pb_text">EMPTY</div></div>
</div>

<div class=".et_pb_row_inner"> <!-- second column text empty, remove whole row -->
   <div class="et_pb_column"><div class="et_pb_text">HAS TEXT</div></div>
   <div class="et_pb_column"><div class="et_pb_text">EMPTY</div></div>
</div>

我找到了一个代码片段并尝试了以下操作:

$(function() {
    $('.et_pb_row_inner').each(function() {
        if ($('.et_pb_text', this).text() == "" ) {
            $('.et_pb_row_inner').hide();
        }
    });
});

它有点工作,但它会删除所有带有 class“et_pb_row_inner”的 div,而不仅仅是包含空文本 div 的那些。

我想这只是稍微调整了代码,但我无法让它工作。

有什么想法吗?

尝试使用 div 的子节点访问 _inner div,不带文本。您可以 运行 _inner class 选择器与父 div.

上的 .find 函数

试试这个:

    $('.et_pb_row_inner').each(function() => {
        if ($('.et_pb_text', this).text() == "") {
            $(this).hide();
        }
    });

this 应该指向当前迭代中的 .et_pb_row_inner

首先,在您的 HTML 第三行中,您错误地添加了“.”。在class名字

现在下面的代码片段将完成工作

$(function() {
   $('.et_pb_row_inner').each(function(_, item) {    
        let text = $(item).children().eq(1).text();
      if(text.trim() === "EMPTY"){
        $(item).remove();    
      }
   });
 });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="et_pb_row_inner">
   <div class="et_pb_column"><div class="et_pb_text">HAS TEXT1</div></div>
   <div class="et_pb_column"><div class="et_pb_text">HAS TEXT</div></div>
</div>

<div class="et_pb_row_inner"> <!-- second column text empty, remove whole row -->
   <div class="et_pb_column"><div class="et_pb_text">HAS TEXT2</div></div>
   <div class="et_pb_column"><div class="et_pb_text">EMPTY</div></div>
</div>

<div class="et_pb_row_inner"> <!-- second column text empty, remove whole row -->
   <div class="et_pb_column"><div class="et_pb_text">HAS TEXT3</div></div>
   <div class="et_pb_column"><div class="et_pb_text">EMPTY</div></div>
</div>

已编辑:

$(item).empty() 替换为 $(item).remove()

试试这个:

$('.et_pb_row_inner').each((idx, ele) => {
    if($($(ele).children()[1]).text() === ''){
        $(ele).hide();
    }
})

您可以使用 :contains 选择器在一行代码中实现您所需要的。这里需要注意的是,这是一场贪婪的比赛,即。在这种情况下,它也会匹配 'NOT EMPTY'。我会把它留给 OP 来确定这是否适合他们的用例。

$('.et_pb_row_inner:contains("EMPTY")').remove();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<div class="et_pb_row_inner">
  <div class="et_pb_column">
    <div class="et_pb_text">HAS TEXT</div>
  </div>
  <div class="et_pb_column">
    <div class="et_pb_text">HAS TEXT</div>
  </div>
</div>

<div class="et_pb_row_inner">
  <div class="et_pb_column">
    <div class="et_pb_text">HAS TEXT</div>
  </div>
  <div class="et_pb_column">
    <div class="et_pb_text">EMPTY</div>
  </div>
</div>

<div class="et_pb_row_inner">
  <div class="et_pb_column">
    <div class="et_pb_text">HAS TEXT</div>
  </div>
  <div class="et_pb_column">
    <div class="et_pb_text">EMPTY</div>
  </div>
</div>