<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做到这一点。
答案 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')