Ruby 通过包含文本获取元素名
我正在查看HTML文档中的文本:“必选”。我需要找到保存文本的元素。例如:Ruby 通过包含文本获取元素名,ruby,nokogiri,Ruby,Nokogiri,我正在查看HTML文档中的文本:“必选”。我需要找到保存文本的元素。例如: <p>... Required<p> 但这只能得到完整的HTML元素您应该使用CSS选择器: page.css('p').text 您遇到的问题是:contains伪类匹配在其子体中任何位置具有搜索文本的任何元素。您需要找到包含此类文本的最里面的元素。由于html是所有元素的祖先,因此如果页面的任何位置都包含文本,那么html将包含文本,因此这将是第一个匹配元素 我不确定您是否可以通过CSS实
<p>... Required<p>
但这只能得到完整的HTML元素您应该使用CSS选择器:
page.css('p').text
您遇到的问题是
:contains
伪类匹配在其子体中任何位置具有搜索文本的任何元素。您需要找到包含此类文本的最里面的元素。由于html
是所有元素的祖先,因此如果页面的任何位置都包含文本,那么html
将包含文本,因此这将是第一个匹配元素
我不确定您是否可以通过CSS实现这一点,但您可以像这样使用XPath:
page.at_xpath('//*[text()[contains(., "Required")]]')
这会将具有text()
节点的第一个元素节点作为包含Required
的子元素查找。当您拥有该节点(如果存在)时,您可以在其上调用name
,以给出元素的名称。对于CSS,您可以执行以下操作:
page.at('[text()*="Required"]')
但它不是真正的CSS,甚至不是一个额外的jQuery。问题是,我没有试图获取文本,而是试图获取包含文本的元素名。所以如果它是,“必需的”,我想得到p。如果它是…“必需的”我想获得td,等等。这如何满足要求“…它可能不在标签中。它可以在任何类型的标签中…”?这正是我需要的。谢谢。
*=
是css,但text()
不是。
page.at('[text()*="Required"]')