CSS 在自定义元素没有值时隐藏祖父 div 和所有 child 元素

CSS hide grandparent div and all child elements when a custom element has no value

当祖父母 div 中的自定义元素为空时,我试图隐藏祖父母 div 及其所有 child 元素。不幸的是,我无法直接控制 HTML,因为它建立在 Salesforce 社区之上,强制以某种方式创建 HTML。但是,我可以编辑 CSS 和 JS 来实现这一点。

这是一个 HTML 的示例,我想用 class =slds-col slds-grid [=35= 隐藏祖父母 div ]" 当元素 "lightning-formatted-text" 为空时,当该元素中有值时将其保留在原位:

<div c-contactinformation_contactinformation="" class="slds-col slds-grid slds-size_12-of-12">
  <div c-contactinformation_contactinformation="" class="slds-border_bottom slds-clearfix">
    <div c-referralcontactinformation_referralcontactinformation="" class="slds-float--left">
      <lightning-output-field c-contactinformation_contactinformation="" class="slds-form-element slds-form-element_stacked" lightning-outputfield_outputfield-host=""><span lightning-outputfield_outputfield="" class="slds-form-element__label">Last Name</span>
        <div lightning-outputfield_outputfield="" class="slds-form-element__control">
          <lightning-formatted-text lightning-outputfield_outputfield="" class="slds-form-element__static">testLastName</lightning-formatted-text>
          <slot lightning-outputfield_outputfield=""></slot>
        </div>
      </lightning-output-field>
    </div>
  </div>
</div>

我已经尝试了很多这种 CSS 的变体,但当该元素为空时却收效甚微:

.slds-col.slds-grid.slds-size_12-of-12 lightning-formatted-text:not(:empty):before {
  display: block;
}

我注意到删除 HTML 的以下部分确实允许此工作。我在 JSfiddle 中进行了测试,方法是删除它并向具有某些值的“lightning-formatted-text”元素添加“data-label”并添加“content: attr(data-label);”到上面的CSS

<lightning-output-field c-contactinformation_contactinformation="" class="slds-form-element slds-form-element_stacked" lightning-outputfield_outputfield-host=""><span lightning-outputfield_outputfield="" class="slds-form-element__label">Last Name</span>

</lightning-output-field>

有什么关于 CSS 解决方案的想法,可以让它与自定义元素“lightning-output-field”以及 HTML 中它之后的跨度一起工作吗?如果这不能在 CSS 中完成,那么 JS 解决方案是什么?

提前致谢!

css 无法影响 child 的 parents 在 jQuery/js 你可以这样做:

$('lightning-formatted-text').each(function(){
    if($(this).is(':empty') || $(this).html(' ')){
        $(this).parents('.slds-col.slds-grid.slds-size_12-of-12').hide()
        // or $(this).parents('.slds-col.slds-grid.slds-size_12-of-12').remove()
    }
})