【发布时间】:2021-06-10 19:21:52
【问题描述】:
我还是个新手,还在学习,但我正在努力完成一个个人项目,所以我在这里寻找一个优雅的解决方案。
把这个项目想象成一个“待办事项”列表。我有多个带有复选框的列表,当复选框为:checked 时,我需要它来更改父li 容器的background-color。
而且,在页面顶部,我有一个复选框来隐藏所有已完成的任务,这是带有已完成 (:checked) 子项的 li 容器。
根据我的阅读,这不可能完全使用 CSS,因为您无法选择样式的父级。然而,我对 JavaScript 的了解太有限,无法理解如何自己制定解决方案或重新利用我在这里看到的许多类似问题的解决方案。我找不到可以将样式传递给display: none; 作为切换的样式。
为了简单起见,我正在寻找一个纯 JS(无 jQuery)的解决方案。
“隐藏已完成任务”复选框应使用display: none / display: flow; 打开或关闭所有已完成任务,单个任务复选框应仅更改父级li 背景颜色。
/*this rule hides all task. I want to only hide the task which are :checked*/
#hide-toggle1:checked~* .task1 {
display: none;
}
/*this css rule hides only the checked input. I need it to hide the whole <li>*/
#hide-toggle2:checked~* .task2>input:checked {
display: none;
}
<body>
<input type="checkbox" id="hide-toggle1">
<label for="hide-toggle1">Hide completed tasks</label>
<ul>
<li class="task1">
<input type="checkbox" id="1-1" value="0">
<label for="1-1">Task 1</label>
</li>
<li class="task1">
<input type="checkbox" id="1-2" value="0">
<label for="1-2">Task 2</label>
</li>
<li class="task1">
<input type="checkbox" id="1-3" value="0">
<label for="1-3">Task 3</label>
</li>
</ul>
<input type="checkbox" id="hide-toggle2">
<label for="hide-toggle2">Hide completed tasks</label>
<ul>
<li class="task2">
<input type="checkbox" id="2-1" value="0">
<label for="2-1">Task 1</label>
</li>
<li class="task2">
<input type="checkbox" id="2-2" value="0">
<label for="2-2">Task 2</label>
</li>
<li class="task2">
<input type="checkbox" id="2-3" value="0">
<label for="2-3">Task 3</label>
</li>
</ul>
</body>
【问题讨论】:
-
CSS 没有办法回溯元素树。您不能根据其子元素来定位元素。
标签: javascript html css-selectors