1

给定下表:

<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
  • 酒吧 => 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)。

这是jQuery 的解决方案,但我希望该解决方案可以与pup命令一起使用。

我检查了Mozilla 的 CSS 选择器文档页面,但找不到合适的东西。

4

1 回答 1

2

你的选择器

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

tr表示直接跟在 a之后的 a 的文本td,作为兄弟。根据表结构,trs 不是 s 的兄弟姐妹td——他们是他们的父母。

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

于 2019-03-22T05:11:28.383 回答