我发现了一个奇怪的错误,其中CSS :first-child
选择器似乎无法为我选择一个表行。
我有下表
<table>
<tr class="a">
<td>a</td>
</tr>
<tr class="b">
<td>b</td>
</tr>
<tr class="b">
<td>b</td>
</tr>
<tr class="c">
<td>c</td>
</tr>
<tr class="c">
<td>c</td>
</tr>
</table>
我想在tr.b的第一个实例之前添加一行。
此代码不起作用:
$("table tr.b:first-child").before("<tr><td>using css selector</td></tr>");
但这样可以正常工作:
$("table tr.b").first().before("<tr><td>using jquery first()</td></tr>");
这是一个已知问题,还是我做错了什么?我不介意使用jQuery,但我不明白为什么这不适用于纯CSS。
这是一个小提琴:
答案 0 :(得分:1)
这就是假设工作的方式。:first
伪类等同于:eq(0)
。它也可以写成:lt(1)
。虽然这只匹配一个元素,但:first-child
可以匹配多个:每个父元素一个。
试试这个:
$("table tr.b:first").before("<tr><td>css selector</td></tr>");
OR
$("table tr.b:eq(0)").before("<tr><td>css selector</td></tr>");
<强> Working Demo 强>
答案 1 :(得分:1)
关于CSS与选择器的对比。
在CSS中,您的选择将是:
table tr:first-child + tr.b
如果它具有类.b
要选择第一个.b类,您需要覆盖该规则。
tr.b {/*set my rule */
tr.b ~tr.b {/*reset my rule */
让这种CSS选择器变得可用是很好的::first-of-class('myclass');
答案 2 :(得分:0)
答案 3 :(得分:0)
$("table tr.b:first")
可以解决问题。