Html CSS选择器或xpath,用于迭代具有特定属性的行
想象一下,给我一张这样的桌子:Html CSS选择器或xpath,用于迭代具有特定属性的行,html,xpath,css-selectors,Html,Xpath,Css Selectors,想象一下,给我一张这样的桌子: <table> <tr><td>A</td></tr> <tr><td><a href="#">B</a></td></tr> <tr><td><a href="#">C</a></td></tr> <tr><td>D<
<table>
<tr><td>A</td></tr>
<tr><td><a href="#">B</a></td></tr>
<tr><td><a href="#">C</a></td></tr>
<tr><td>D</td></tr>
<tr><td><a href="#">E</a></td></tr>
<tr><td>B</td></tr>
</table>
CSS选择器
在这一点上,我很确定CSS不会起作用,但是
'table tr:nth-child(' + n + ')'
将选择第n行,但这将选择行是否具有a
锚定。同样地
'table tr:nth-child(' + n + ') a'
仅当n
为2、3或5时,才会选择带有a
锚定的行
XPath
对于XPath,它匹配所有具有a
`//table//tr//a/ancestor::tr`
但是我不知道如何选择第n场比赛。特别是,
`//table//tr//a/ancestor::tr[position() = 2]`
似乎没有选择任何内容。如果我理解正确,您可以找到第n个
td
,它有一个您无法使用CSS选择器1执行此操作,原因有很多:
- ,及
XPath不正确,因为a/concenter::tr[position()=2]
返回a
元素的第二个tr
祖先。也就是说,[position()=2]
谓词连接到祖先::
轴。此XPath将匹配以下HTML中的中级tr
:
<table>
<tr><td><table>
<tr><td><table>
<tr><td><a href="#"></a>
</table>
</table>
</table>
这与包含子体的第二个tr
元素相匹配
1在选择器4中,可能的解决方案是表tr:n匹配(2个:has(a))
来自@BoltClock和@StuartLC的答案都有效。但现在我知道XPath中的括号可以控制运算符优先级,一个更简单的解决方案似乎是:
(//table//tr//a)[2]
我错过什么了吗?答对了。很好的解释。严格地说,我认为真正的答案是(//table//tr[genderant::a])[2]//a
来挑选a
元素。啊!这同样有效。我以前不知道可以在XPath中使用括号表示运算符优先级。这种方法感觉比使用后代更简单::我想有一点需要指出的是:。)
(/table//tr//*[a[@href]])[2]
<table>
<tr><td><table>
<tr><td><table>
<tr><td><a href="#"></a>
</table>
</table>
</table>
(//table//tr[descendant::a])[2]
(//table//tr//a)[2]