鉴于下表:
<table>
<tr>
<td>Foo</td>
<td>Bar</td>
<td>Buzz</td>
</tr>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
</tr>
<tr>
<td>4</td>
<td>5</td>
<td>6</td>
</tr>
</table>
假设我不知道值的固定位置,我想通过给出第一行列名来选择第二行,例如:
目前我知道如何获取列的名称(第1行):
$ pup -f table.html 'td:contains("Foo") text{}'
Foo
我知道如何通过以下方式返回下一栏:
$ pup -f table.html 'td:contains("Foo") + td text{}'
Bar
我期望得到下一行:
$ pup -f table.html 'td:contains("Foo") + tr text{}'
但它没有返回任何东西(我希望是1
)。
这是the solution with jQuery,但我希望该解决方案能够与pup
命令一起使用。
我检查了Mozilla's CSS selector docs page,但我找不到合适的东西。
你的选择器
td:contains("Foo") + tr text{}
代表tr
的文本,直接跟随td
,作为兄弟姐妹。根据表结构,tr
s不是td
s的兄弟姐妹 - 他们是他们的父母。
pup有自己的:parent-of()
伪类,列出here,但这对你的需求来说是不够的,因为你没有办法在你所拥有的同一列中选择下一行的td
。选择器4的列组合器||
完全符合您的要求,但它并没有在任何地方实现,当然也没有在小狗中实现。使用主要适用于CSS选择器的任何命令行工具来完成此操作并非易事。