Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 通过包含文本获取元素名_Ruby_Nokogiri - Fatal编程技术网

Ruby 通过包含文本获取元素名

Ruby 通过包含文本获取元素名,ruby,nokogiri,Ruby,Nokogiri,我正在查看HTML文档中的文本:“必选”。我需要找到保存文本的元素。例如: <p>... Required<p> 但这只能得到完整的HTML元素您应该使用CSS选择器: page.css('p').text 您遇到的问题是:contains伪类匹配在其子体中任何位置具有搜索文本的任何元素。您需要找到包含此类文本的最里面的元素。由于html是所有元素的祖先,因此如果页面的任何位置都包含文本,那么html将包含文本,因此这将是第一个匹配元素 我不确定您是否可以通过CSS实

我正在查看HTML文档中的文本:“必选”。我需要找到保存文本的元素。例如:

<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"]')