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