如何选择特定类型元素的父元素?

时间:2013-06-28 09:49:12

标签: ruby nokogiri

<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上多次调用<td>来执行此操作,但我想要遍历,直到找到<tbody>并获取该元素。 jQuery有这种能力,但我不知道如何用Nokogiri做到这一点。

4 个答案:

答案 0 :(得分:3)

我要去:

page.at('td[text()*="HP"]').ancestors('tbody')[0]

答案 1 :(得分:2)

XPath使这更容易

tbody = page.xpath '//tbody[tr/td[contains(.,"HP")]]'

答案 2 :(得分:0)

这样的事情应该有效

page.search('td').text_includes('HP').xpath('./ancestor::tbody[1]')

答案 3 :(得分:0)

请参阅Nokogiri equivalent of jQuery closest() method for finding first matching ancestor in tree

所以例如:

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

或在rails中:

src = element.ancestors('table').first.try(:fetch, 'src')