问题在于这个 CSS 和 HTML。这是带有示例代码 的 jsFiddle 的链接。
HTML
<ul>
<li class"complete">1</li>
<li class"complete">2</li>
<li>3</li>
<li>4</li>
</ul>
CSS
li.complete:last-child {
background-color:yellow;
}
li.complete:last-of-type {
background-color:yellow;
}
这些 CSS 行中的任何一行都不应该 以“完整”类的最后一个 li 元素为 目标吗?
jQuery 中的这个查询也不针对它:
$("li.complete:last-child");
但是这个可以:
$("li.complete").last();
li {
background-color: green;
}
li.complete:first-child {
background-color: white;
}
li.complete:first-of-type {
background-color: red;
}
li.complete:last-of-type {
background-color: blue;
}
li.complete:last-child {
background-color: yellow;
}
<ul>
<li class="complete">1</li>
<li class="complete">2</li>
<li>3</li>
<li>4</li>
</ul>
原文由 Nej Kutcharian 发布,翻译遵循 CC BY-SA 4.0 许可协议
last-child
选择器用于选择父元素的最后一个子元素。它不能用于选择给定父元素下具有特定类的最后一个子元素。复合选择器的另一部分(附加在
:last-child
之前)指定了最后一个子元素必须满足的额外条件才能被选中。在下面的代码片段中,您将看到所选元素如何根据复合选择器的其余部分而有所不同。为了回答您的问题,下面将设置最后一个子元素
li
背景颜色为红色的样式。但是以下选择器不适用于您的标记,因为
last-child
没有class='complete'
即使它是li
。如果(且仅当)您的标记中的最后一个
li
也有class='complete'
时,它才会起作用。要在 评论 中解决您的查询:
选择器
.complete:first-of-type
在小提琴中起作用,因为它(即带有class='complete'
的元素)仍然是父元素中li
类型的第一个元素。尝试添加<li>0</li>
作为ul
下的第一个元素,您会发现first-of-type
也会失败。这是因为first-of-type
和last-of-type
选择器选择父项下每种类型的第一个/最后一个元素。有关选择器如何工作的更多详细信息,请参阅 此 线程中 BoltClock 发布的答案。这是最全面的:)