CSS选择第一个子元素

3

我仍在努力弄清如何正确使用nthfirstlast子选择器。感谢您的耐心。

如果我的标记如下:

<div class="the-wrapper">
    <table class="the-table">
       <!-- the table -->
    </table>

    <table class="the-table">
       <!-- the table -->
    </table>
</div>

如何选择最后一个<table class="the-table"> 来应用边距?

我认为我可以这样选择它:.the-wrapper .the-table:last-of-type { /* css */ } 但是这并不起作用。我错过了什么吗?谢谢!

编辑


对不起,大家,我错误地打印了我的标记... 正确的标记在上面。


你需要使用加号,写成 .the-wrapper + .the-table:last-child { /* 属性 */}。加号可以确保CSS只在这两个类都存在的情况下应用。 - Afzaal Ahmad Zeeshan
嗨,谢谢你的建议,但那对我没有起作用。 - Dude
在尝试任何发布的解决方案之前,请首先检查您要针对的浏览器是否实际支持这些伪类 - André Dion
1
我正在使用Firefox 22,并且已经能够在其他页面上选择nth和子元素,但我不确定这里的问题是什么。我开始觉得可能标记中存在问题(我没有创建)。这是一个fiddle。如果您有任何想法,我会非常感激!这一直困扰着我(哈哈)! - Dude
如果可以的话,为什么不直接使用.the-table:last-child {}呢?这样有帮助吗? - Afzaal Ahmad Zeeshan
谢谢,但我需要更具体的选择器来避免选择其他页面上类似的元素。不过还是谢谢。 - Dude
3个回答

3

+ 用于选择“同级”元素。(同级指的是具有相同父元素的子元素)http://jsfiddle.net/Lhmjq/

你不能使用nth-childlast-child来实现此操作;正如其名称所示,它是针对子元素的,除非你放置一个父元素,否则无法操作。

以下是一个带有父元素的示例:http://jsfiddle.net/Lhmjq/2/ 在这种情况下,使用了last-child


(已更新为您的新代码) 这是一个 jsfiddle 链接: http://jsfiddle.net/Lhmjq/4/

.the-wrapper .the-table:last-child {
    color: blue;
}

根据您的新代码进行更新: http://jsfiddle.net/Lhmjq/4/


好的,谢谢,我明白了。然而,我输入了.the-wrapper:last-child .the-table { color: red; },但它把两个.the-table都变成了红色.. 你有什么想法吗? - Dude
谢谢@chris-I。这就是我最初想到的。不过,尝试使用.the-wrapper .table-wrapper:last-child并没有成功选中任何元素,原因不明。我很困惑为什么这个方法在我的代码中不起作用,但是在你提供的jsfiddle中却可以。我的标记有一些额外的元素,但结构与上面相同:在the-wrapper内有多个the-table实例。你遇到过类似的情况吗? - Dude
1
请注意,+ 组合器用于选择相邻兄弟元素。对于 一般的兄弟元素,请使用 ~ 组合器。 - André Dion
非常感谢@chris-I。这是一个fiddle。如果您有时间检查一下,我会非常感激! - Dude
好的,请看这个链接:http://jsfiddle.net/r95gz/8/ 我移除了最后一个 <br> 标签并闭合了 <div> 标签。我猜测未闭合的 div 标签可能会激活某种怪异模式,但无论如何,现在它可以正常工作了。 - chris-l
显示剩余7条评论

1
.the-wrapper .the-table:last-child { /* css */ }

之前的代码应该选择包装器中的最后一个表格。结构伪类的目标可能会让人感到困惑。伪类是根据其直接父元素定义的。例如,假设您有一组元素:

<ul class="target-me">
    <li>One</li>
    <li>Two</li>
    <li>Three</li>
</ul>

如果你想选择列表中的最后一个 li 元素,你可以使用以下 CSS 代码:

.target-me > li:last-child { color: red; }

你也可以使用伪选择器来从DOM中的位置定位编号项,比如我想要定位第二个元素:
.target-me > li:nth-child(2) { color: red; }

你可以在选择器层次结构中使用这些伪选择器。
.target-me > li:first-child span { ... }

您可以链式使用伪选择器:

.target-me > li:first-child:hover { ... }

结合像Selectivizr这样的polyfill,您可以在所有浏览器上使用这些选择器。我希望这有所帮助!


3
我相信OP想要选中表格,而这将会选中div的父元素。你可能需要使用.the-wrapper:last-child .the-table{} - j08691
好的,也许我没有解释清楚。我想选择the-table的最后一个实例并对其应用边距。我尝试过.the-wrapper:last-child .the-table { color: red; },但它选择了the-table的两个实例而不仅仅是最后一个。有任何想法为什么会发生这种情况吗? - Dude

0

你的代码 ".the-wrapper .the-table:last-child" 会返回所有 ".the-wrapper" 类的最后一个子元素。你想要做的是选择最后一个 ".the-wrapper" 元素。下面的代码将选择最后一个 ".the-wrapper" 元素的最后一个子表格,这正是你要找的...

$('.the-wrapper .the-table:last-child').last().css("border","1px solid #b5b5b5")

干杯!


谢谢,但我正在寻找一个纯CSS的解决方案。 - Dude

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接