如何通过pup从下一行选择值?

时间:2019-03-22 01:07:13

标签: html html-table css-selectors pup

给出下表:

<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>

假设我不知道该值的固定位置,我想通过给出第一行的列名来选择第二行,例如:

  • Foo => 1
  • Bar => 2
  • 嗡嗡声=> 3

目前,我知道如何获取列名(第一行):

$ 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,但是找不到合适的东西。

1 个答案:

答案 0 :(得分:1)

您的选择器

td:contains("Foo") + tr text{}

表示紧随tr之后的td的文本,作为同级。根据表结构,tr不是td的兄弟姐妹,而是他们的父母。

pup具有其自己的:parent-of()伪类,列为here,但是这不足以满足您的需要,因为您无法在其中选择下一行的td与您拥有的同一列。选择器4的列组合器||完全可以满足您的要求,但是它并没有在任何地方实现,当然也没有在pup中实现。使用主要与CSS选择器一起使用的任何命令行工具来执行此操作并非易事。