给出下表:
<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>
假设我不知道该值的固定位置,我想通过给出第一行的列名来选择第二行,例如:
目前,我知道如何获取列名(第一行):
$ 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,但是找不到合适的东西。
答案 0 :(得分:1)
您的选择器
td:contains("Foo") + tr text{}
表示紧随tr
之后的td
的文本,作为同级。根据表结构,tr
不是td
的兄弟姐妹,而是他们的父母。
pup具有其自己的:parent-of()
伪类,列为here,但是这不足以满足您的需要,因为您无法在其中选择下一行的td
与您拥有的同一列。选择器4的列组合器||
完全可以满足您的要求,但是它并没有在任何地方实现,当然也没有在pup中实现。使用主要与CSS选择器一起使用的任何命令行工具来执行此操作并非易事。