【发布时间】:2019-06-29 14:03:51
【问题描述】:
我不知道标题是否有点令人困惑,但是这个 sn-p 会更好地解释它。
function select(event) {
$('li').removeClass('is-active');
$(event.target).parent().addClass('is-active');
}
.item {
background-color: #c3c3c3;
display: flex;
flex-direction: column;
margin-top: 5px;
margin-bottom: 5px;
}
.item.is-active .itemName {
background-color: red;
}
.item:hover {
cursor: pointer;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li class="item" onclick="select(event)">
<span class="itemName">Parent</span>
</li>
<li class="item" onclick="select(event)">
<span class="itemName">Parent</span>
<ol>
<li class="item" onclick="select(event)">
<span class="itemName">Children</span>
</li>
<li class="item" onclick="select(event)">
<span class="itemName">Children</span>
</li>
</ol>
</li>
</ul>
单击第一个父级,父级将具有红色背景。 现在单击第二个父级,父级和子级现在将具有红色背景。
我想防止这种情况发生。如果我点击父母,父母应该只涂成红色,不管它有多少孩子。
那么 CSS 会是什么?无需添加这么多额外的课程?就我而言,父母和孩子都是共享相同样式的列表项。
我在考虑使用 :not() 吗?但这需要为每个孩子增加一个额外的课程。有没有其他方法可以解决这个问题?
谢谢。
【问题讨论】:
-
只需为
<li>中的<span>元素定义一个background-color。 -
不知道你的意思,但请记住,孩子们也是可点击的,我希望他们在点击后会有红色背景。
-
尝试
.item.is-active{而不是.item.is-active .itemName {.. 然后如果你需要阻止spans你需要添加e.stopPropagation()来阻止默认点击 -
不过,这会为整个列表项添加背景。不是想要的效果。我想我是通过在它们上使用“>”来实现的。
标签: javascript jquery css