通过包含文本来获取元素名称

时间:2015-04-03 13:43:48

标签: ruby nokogiri

我正在浏览HTML文档中的文字:“必填”。我需要找到的是保存文本的元素。例如:

<p>... Required<p>

我会得到元素名称= p

但是,它可能不在<p>标记中。它可以是任何类型的标记,这个问题与其他一些搜索文本Stack Overflow问题不同。

现在我正在使用:

page.at(':contains("Required")')

但这只能得到完整的HTML元素

3 个答案:

答案 0 :(得分:2)

您遇到的问题是:contains伪类匹配在其后代中的任何位置搜索文本的任何元素。您需要找到包含此类文本的最内层元素。由于html是所有元素的祖先,如果页面包含任何位置的文本,那么html将包含,因此这将是第一个匹配的元素。

我不确定你能用CSS实现这个目的,但你可以像这样使用XPath:

page.at_xpath('//*[text()[contains(., "Required")]]')

这将查找具有text()节点的第一个元素节点作为包含Required的子节点。如果您拥有该节点(如果存在),则可以在其上调用name以提供该元素的名称。

答案 1 :(得分:0)

你应该使用CSS选择器:

page.css('p').text

答案 2 :(得分:0)

对于CSS,您可以这样做:

page.at('[text()*="Required"]')

它不是真正的CSS,甚至是jQuery额外的。