Pas*_*ass 10 css css-selectors css3
可以说我们有以下代码:
<node>
<element bla="1"/>
<element bla="2"/>
<element bla="3"/>
<element bla="3"/>
<element bla="3"/>
<element bla="4"/>
</node>
Run Code Online (Sandbox Code Playgroud)
你会如何选择属性等于3的第一个孩子?我在想,也许这可以做到这一点:
element[bla="3"]:first-child
Run Code Online (Sandbox Code Playgroud)
......但它没有用
Bol*_*ock 19
该:first-child
伪类仅着眼于第一子节点,因此,如果第一个孩子是不是element[bla="3"]
,再没有什么选择.
属性没有类似的过滤器伪类.一个简单的方法是选择每一个然后排除第一个之后的内容(此技巧在这里和这里解释):
element[bla="3"] {
}
element[bla="3"] ~ element[bla="3"] {
/* Reverse the above rule */
}
Run Code Online (Sandbox Code Playgroud)
当然,这仅适用于应用样式; 如果你想为样式之外的目的选择那个元素(因为你的标记似乎是任意的XML而不是HTML),你将不得不使用其他类似的东西document.querySelector()
:
var firstChildWithAttr = document.querySelector('element[bla="3"]');
Run Code Online (Sandbox Code Playgroud)
或XPath表达式:
//element[@bla='3'][1]
Run Code Online (Sandbox Code Playgroud)