我使用Rails 4.2.7与Nokogiri。是否有一种方法,我可以告诉Nokogiri,其中一个选项在我的选择菜单包含单词"结果"在其文本字段(这将是可见的最终用户)?
我:
options = doc.css("#menu_id option")
我可以遍历它们,检查文本,但我想可能有一个css选择器表达式或类似的东西我可以用Nokogiri更快地告诉我这个答案
这是通用的方法:
require 'nokogiri'
doc = Nokogiri::HTML(<<EOT)
<html>
<body>
<form>
<select id="menu_id">
<option value="foo">foo</option>
</select>
</form>
</body>
</html>
EOT
doc.search('#menu_id option').any?{ |option| option.text == 'foo' } # => true
查看文本(而不是值)是否为"foo"
。
doc.search('#menu_id option').any?{ |option| option.text['foo'] } # => true
查看文本(而不是值)是否包含子字符串"foo"
。
doc.search('#menu_id option').any?{ |option| option['value'] == 'foo' } # => true
查看value
参数是否与单词"foo"
匹配。
doc.search('#menu_id option').any?{ |option| option.text == 'bar' } # => false
doc.search('#menu_id option').any?{ |option| option.text['bar'] } # => false
doc.search('#menu_id option').any?{ |option| option['value'] == 'bar' } # => false
我可能会依赖于Nokogiri的jQuery扩展的实现,@gmcnaughton提到的,但这就是我。YMMV .
Nokogiri支持jQuery的:contains
选择器,它选择具有给定内容的节点:
doc.css(“#menu_id option:contains('Results'")
您也可以使用XPath来完成,XPath功能更强大,但更冗长:
doc.xpath('//*[@id='menu_id']//option[contains(text(), "Results")]')
参见"Nokogiri:如何通过匹配文本选择节点?"。