html - 如何将 :not Selector 与 > Selector 结合使用?
问题描述
我有一个看起来像这样但更广泛的无序列表:
<ul>
<li class="cat-item-15">Parent Category 2</li>
<li class="cat-item-16">Parent Category 2</li>
<li class="cat-item-17">Parent Category 3
<ul class="children">
<li>Child Category 1</li>
<li>Child Category 2</li>
<li>Child Category 3</li>
</ul>
</li>
</ul>
我想li
用display: none
. 我的想法是使用:not
选择器并排除所有子类别。我可以使用子类别来处理子类别,ul.children > li
但如何将其与:not
选择器结合使用?
有任何想法吗?
解决方案
不幸的是,如果不向包含 ul.children 的父 li 添加类名,就无法动态执行此操作。有一个:has()伪类可以做到这一点,但它在大多数浏览器中不起作用。
作为替代方案,您可以使用 javascript 动态地将唯一类应用于包含 ul.children 列表的父项。这将允许您使用新类来定位父列表项。我附上了一个使用 JS 的工作示例。
var menuItems = document.querySelectorAll('li');
menuItems.forEach(menuItem => {
var submenu = menuItem.querySelectorAll('.children');
if (submenu.length) {
menuItem.classList.add('has-sub-menu');
}
});
ul li {
display: none;
}
ul li.has-sub-menu {
display: block;
}
ul.children li {
display: block;
}
<ul>
<li class="cat-item-15">Parent Category 2</li>
<li class="cat-item-16">Parent Category 2</li>
<li class="cat-item-17">Parent Category 3
<ul class="children">
<li>Child Category 1</li>
<li>Child Category 2</li>
<li>Child Category 3</li>
</ul>
</li>
<li class="cat-item-17">Parent Category 4</li>
<li class="cat-item-17">Parent Category 5
<ul class="children">
<li>Child Category 1</li>
<li>Child Category 2</li>
<li>Child Category 3</li>
</ul>
</li>
</ul>
推荐阅读
- word2vec - word2vec 中的词汇大小与向量大小
- python - 使用while循环检查文件中是否存在字符串
- javascript - 使用 chrome 扩展覆盖用户定义的函数以使用本机函数
- java - 使用springboot连接多个Kafka服务器
- javascript - 如何用 JavaScript 或 jQuery 中的值替换整个输入字段?
- vue.js - 与 Browserify 的单个文件组件分开包含 Vue 运行时
- qt - Qt 中的地理编码模型
- python - 如何在 Python 中求解/拟合几何布朗运动过程?
- javascript - 实时交易应用程序设计 - UX 和 React
- php - 流明和 mongodb 的不同查询不起作用