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


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

我可以通过在那个<td>上多次调用parent来做到这一点,但我想遍历直到找到<tbody>并得到该元素。 jQuery具有这种能力,但我不确定如何使用Nokogiri执行此操作。

我要去:

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

XPath 使这变得容易得多

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

这样的东西应该有效

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

参见 Nokogiri 等效的 jQuery closest(( 方法,用于查找树中的第一个匹配祖先

所以例如:

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

或在导轨中:

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

相关内容

  • 没有找到相关文章

最新更新