如何检查我的选择菜单中的一个选项是否包含文本



我使用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:如何通过匹配文本选择节点?"。

相关内容

  • 没有找到相关文章

最新更新