通过包含文本获取元素名称
Get element name by containing text
我正在 HTML 文档中查找文本:"Required"。我需要找到的是保存文本的元素。例如:
<p>... Required<p>
我会得到元素名称 = p
但是,它可能不在 <p>
标签中。它可以在任何类型的标签中,这是这个问题与其他一些搜索文本 Stack Overflow 问题不同的地方。
现在我正在使用:
page.at(':contains("Required")')
但这只会让我得到完整的 HTML 元素
您应该使用 CSS 选择器:
page.css('p').text
您遇到的问题是 :contains
伪 class 匹配在其后代的任何位置搜索到文本的任何元素。您需要找到包含此类文本的最内层元素。由于 html
是所有元素的祖先,如果页面包含任何地方的文本,那么 html
将包含,因此这将是第一个匹配元素。
我不确定您是否可以使用 CSS 实现此目的,但您可以像这样使用 XPath:
page.at_xpath('//*[text()[contains(., "Required")]]')
这将找到具有 text()
节点作为包含 Required
的子节点的第一个元素节点。当您拥有该节点(如果它存在)时,您可以在其上调用 name
以提供元素的名称。
对于 CSS 你可以这样做:
page.at('[text()*="Required"]')
虽然这不是真的 CSS,甚至是 jQuery 额外的。
我正在 HTML 文档中查找文本:"Required"。我需要找到的是保存文本的元素。例如:
<p>... Required<p>
我会得到元素名称 = p
但是,它可能不在 <p>
标签中。它可以在任何类型的标签中,这是这个问题与其他一些搜索文本 Stack Overflow 问题不同的地方。
现在我正在使用:
page.at(':contains("Required")')
但这只会让我得到完整的 HTML 元素
您应该使用 CSS 选择器:
page.css('p').text
您遇到的问题是 :contains
伪 class 匹配在其后代的任何位置搜索到文本的任何元素。您需要找到包含此类文本的最内层元素。由于 html
是所有元素的祖先,如果页面包含任何地方的文本,那么 html
将包含,因此这将是第一个匹配元素。
我不确定您是否可以使用 CSS 实现此目的,但您可以像这样使用 XPath:
page.at_xpath('//*[text()[contains(., "Required")]]')
这将找到具有 text()
节点作为包含 Required
的子节点的第一个元素节点。当您拥有该节点(如果它存在)时,您可以在其上调用 name
以提供元素的名称。
对于 CSS 你可以这样做:
page.at('[text()*="Required"]')
虽然这不是真的 CSS,甚至是 jQuery 额外的。