如何检查我的 select 菜单中的某个选项是否包含文本?
How to check if one of the options in my select menu contains text?
我正在使用 Rails 4.2.7 和 Nokogiri。有没有一种方法可以告诉我,通过 Nokogiri,我的 select 菜单中的一个选项在其文本字段中包含 "Results" 一词(最终用户可以看到)?
我有:
options = doc.css("#menu_id option")
我可以循环浏览所有这些内容,检查文本,但我想可能会有一个 CSS-select 或表达式或类似的东西,我可以用 Nokogiri 来告诉我这个回答更快。
Nokogiri 支持 jQuery 的 :contains
选择器,它选择具有给定内容的节点:
doc.css(“#menu_id option:contains('Results'")
您也可以使用 XPath 来完成,它功能更强大但更冗长:
doc.xpath('//*[@id='menu_id']//option[contains(text(), "Results")]')
参见“Nokogiri: How to select nodes by matching text?”。
这是通用的方法:
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 对 @gmcnaughton 提到的 jQuery 扩展的实现,但我就是这样。 YMMV.
我正在使用 Rails 4.2.7 和 Nokogiri。有没有一种方法可以告诉我,通过 Nokogiri,我的 select 菜单中的一个选项在其文本字段中包含 "Results" 一词(最终用户可以看到)?
我有:
options = doc.css("#menu_id option")
我可以循环浏览所有这些内容,检查文本,但我想可能会有一个 CSS-select 或表达式或类似的东西,我可以用 Nokogiri 来告诉我这个回答更快。
Nokogiri 支持 jQuery 的 :contains
选择器,它选择具有给定内容的节点:
doc.css(“#menu_id option:contains('Results'")
您也可以使用 XPath 来完成,它功能更强大但更冗长:
doc.xpath('//*[@id='menu_id']//option[contains(text(), "Results")]')
参见“Nokogiri: How to select nodes by matching text?”。
这是通用的方法:
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 对 @gmcnaughton 提到的 jQuery 扩展的实现,但我就是这样。 YMMV.