2
<table>
  <tbody>
    <tr>
      <td>
        Product Name
      </td>
    </tr>
    <tr>
      <td>
        Apple
      </td>
    </tr>
    <tr>
      <td>
        Dell
      </td>
    </tr>
    <tr>
      <td>
        HP
      </td>
    </tr>
  </tbody>
</table>

从上面的 HTML 代码中,我应该能够执行以下操作:

page.search('td').text_includes('HP').last.up('tbody')

我可以通过parent多次调用 that来做到这一点<td>,但我想遍历直到找到<tbody>并获取该元素。jQuery 有这种能力,但我不知道如何用 Nokogiri 做到这一点。

4

4 回答 4

3

我要去:

page.at('td[text()*="HP"]').ancestors('tbody')[0]
于 2013-06-28T10:27:29.040 回答
2

XPath 使这更容易

tbody = page.xpath '//tbody[tr/td[contains(.,"HP")]]'
于 2013-06-28T10:04:19.533 回答
0

像这样的东西应该工作

page.search('td').text_includes('HP').xpath('./ancestor::tbody[1]')
于 2013-06-28T09:53:35.757 回答
0

请参阅Nokogiri 等效于 jQuery 最接近()方法,以在树中查找第一个匹配的祖先

例如:

src = (element.ancestors('table').first || { })['src']

或在铁轨中:

src = element.ancestors('table').first.try(:fetch, 'src')
于 2013-06-28T09:54:00.223 回答