【发布时间】:2020-10-29 12:23:42
【问题描述】:
问题:我想根据是否显示类似名称元素的子元素来隐藏多个元素。
上下文:我在一个 div 中包含多个列表项,如下所示:
<div class="itemGrid">
<ul>
<li>
<button class="header" id="headerCommonItems">
"Common Items"
::after
</button>
<ul class="icons" id="iconsCommonItems">
<li class="itemTile">Apples</li>
<li class="itemTile">Oranges</li>
</ul>
</li>
<li>
<button class="header" id="headerUncommonItems">
"Uncommon Items"
::after
</button>
<ul class="icons" id="iconsUncommonItems">
<li class="itemTile">Pears</li>
<li class="itemTile">Bananas</li>
</ul>
</li>
<li>
<button class="header" id="headerRareItems">
"Rare Items"
::after
</button>
<ul class="icons" id="iconsRareItems">
<li class="itemTile">Pineapples</li>
<li class="itemTile">Guavas</li>
</ul>
</li>
</ul>
</div>
我有一个搜索功能,可以根据搜索条件显示/隐藏图标(例如,如果我搜索术语“common”,它只会显示 Apples 和 Oranges 的图标,但隐藏所有其他图标)。
如果没有可见的相应图标,我想隐藏标题。因此,使用前面的示例,我只希望“Common Items”标题显示我是否正在搜索术语“Common”并隐藏“Uncommon Items”和“Rare Items”标题。目前,即使下面没有图标,它仍然会显示其他标题。
我尝试引用多个 SO 页面,但这是我第一次使用 JQuery,我似乎无法让它工作。这是我迄今为止尝试过的一种变体。
$.each($("[id ^= 'icons']").filter(
function()
{
if ($(this).find('li:visible').length !== 0)
{
console.log("Visible children.");
return;
}
}))
.hide();
我已经能够隐藏图标,但是如果图标的子元素被隐藏,我不知道如何引用相应的标题并隐藏它们。
这是我一直参考的其他 SO 页面:
【问题讨论】:
-
菠萝和番石榴等子项是否动态添加/删除?据我了解,您只想根据搜索查询隐藏整个部分?
-
嗨@Bren,是的,像菠萝和番石榴这样的项目是动态添加/删除的(更像是隐藏/取消隐藏)。搜索通过从所有图标“visibleItem”中删除一个类并将“visibleItem”类重新添加回与搜索条件匹配的图标。
-
您是否正在寻找能够同时搜索诸如“apple”之类的术语的功能,它返回菠萝和苹果,因为它们的名称相似并且都包含苹果?当我说添加/删除时,我指的是实际从 DOM 中添加和删除的元素,而不是隐藏它的 CSS。
-
嗨,不是真正的搜索。鉴于您的情况,现在当我搜索“Apple”时,我已经在各自的标题下找到了“Apple”和“Pineapple”(“Apple”的常见项目和“Pineapple”的稀有项目)。但我也得到的是 Uncommon Items 的标题,下面没有任何项目。我想看看Uncommon Items下面是不是没有item,然后把Uncommon Items表头也隐藏起来。
标签: javascript html jquery