jquery - 如果没有使用 jQuery 包含的“li”元素,如何隐藏“ul”元素中的所有内容?
问题描述
我有多个包含标题和列表项的无序列表,但是,一些无序列表没有列表项,我想隐藏此特定列表的标题(即“Candy”)。
我尝试过.hide()
使用.css("display","none")
.
我希望“零食”和“饮料”列表保持不变,而“糖果”和“甜点”无序列表被隐藏,因此如果为空则不显示标题。
if (!$("ul.qrg-products").has("li").length) {
$(".qrg-products").css("display", "none");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="qrg-products">
<h2 class="title">Snack</h2>
<li>Chips</li>
<li>Fruit</li>
<li>Cookies</li>
</ul>
<ul class="qrg-products">
<h2 class="title">Candy</h2>
</ul>
<ul class="qrg-products">
<h2 class="title">Drinks</h2>
<li>Pop</li>
<li>Water</li>
<li>Coffee</li>
</ul>
<ul class="qrg-products">
<h2 class="title">Desserts</h2>
</ul>
解决方案
我建议您使用有效的 HTML
如果您移动标题,您需要使用 .prev 隐藏它们 - 我在这里选择切换。
您还可以将标题移动到 li 并切换长度 === 1
$("ul.qrg-products").each(function() {
var len = $(this).find("li").length > 0
$(this).toggle(len>0); // not super necessary since empty
$(this).prev().toggle(len>0); // hide the Header
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<h2 class="title">Snack</h2>
<ul class="qrg-products">
<li>Chips</li>
<li>Fruit</li>
<li>Cookies</li>
</ul>
<h2 class="title">Candy</h2>
<ul class="qrg-products">
</ul>
<h2 class="title">Drinks</h2>
<ul class="qrg-products">
<li>Pop</li>
<li>Water</li>
<li>Coffee</li>
</ul>
<h2 class="title">Desserts</h2>
<ul class="qrg-products">
</ul>
如果您无法更改 HTML:
$("ul.qrg-products").each(function() {
$(this).toggle($(this).find("li").length>0)
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul class="qrg-products">
<h2 class="title">Snack</h2>
<li>Chips</li>
<li>Fruit</li>
<li>Cookies</li>
</ul>
<ul class="qrg-products">
<h2 class="title">Candy</h2>
</ul>
<ul class="qrg-products">
<h2 class="title">Drinks</h2>
<li>Pop</li>
<li>Water</li>
<li>Coffee</li>
</ul>
<ul class="qrg-products">
<h2 class="title">Desserts</h2>
</ul>
推荐阅读
- sockets - Haskell 数据报 UDP 套接字:接收有效,但发送无效
- python - Docker 上的 Google Cloud AutoML 预测
- c++ - 带有 boost::locale::normalize 的 bad_cast 错误
- android - 使用 Android Studio 问题启动 Flutter
- c# - 基于配置值的 .NET 核心验证属性
- android - 找不到builder.jar (com.android.tools.build:builder:3.5.3)
- java - Registering a custom mediatype in HATEOAS does not work
- mysql - 使用包含简单循环的 MySQL 游标出现奇怪的错误
- python - Azure Bing 图像搜索客户端抛出未找到资源
- android - 在 ViewModel 中使用 MutableLiveData 进行两种数据绑定