如何仅从父标签而不是子标签获取文本
How to get the text only from parent tag and not from the child tag
我只想从下面的代码中获取文本 updated page title
<h2 class="cmp-title__text" xpath="1">
updated page title
<span class="gmt_style" aria-hidden="true">Tue, 20 Jul 2021 13:19:22 GMT</span></h2>
我试过下面的方法,但它也从 span 标签中获取文本,即 Tue , 20 Jul 2021 13:!9:22 GMT
。
var pgTitle=element(by.xpath("//h2[@class='cmp-title__text']"));
var pgTitleFromApp = await translatedPgTitle.getText();
输出:
+updated page title
+Tue, 20 Jul 2021 14:02:35 GMT
请帮忙解决这个问题!
您可以拆分从 getText()
获得的字符串
像这样:
var all = pgTitleFromApp.split(' ');
var title = all[0] + all[1] + all[2];
免责声明:下一个答案可能不适合您使用的技术方法,答案仅包含纯 javascript 解决方案。
在你的情况下,你可以只使用 Node.firstChild
。但它只适用于文本总是第一个 child 的情况。
如果您的文本可以放置在任何其他序列中,您可以使用 Node.childNodes
to get all nodes, filter nodes by checking Node.nodeType
如果它等于 Node.TEXT_NODE
并且只留下文本节点。
<div class="wrapper">
Some text 1
<h1>Some text 2</h2>
</div>
const wrapper = document.querySelector('.wrapper')
const parentTextNode = [...wrapper.childNodes]
.filter(node => node.nodeType === Node.TEXT_NODE)[0];
console.log(parentTextNode); // Some text 1
Xpaths 获取 text
给定此 html 片段的节点:
<h2 class="cmp-title__text">
updated page title
<span>Tue, 20 Jul 2021 13:19:22 GMT</span>
second text
<span>Tue, 20 Jul 2021 13:19:22 GMT</span>
third text
</h2>
可以使用此 xpath 访问第一个文本节点
//h2[@class='cmp-title__text']/text()[1]
第二个:
//h2[@class='cmp-title__text']/text()[2]
没有 span
作为父节点的文本节点:
//h2[@class='cmp-title__text']/descendant::text()[parent::*[name()!='span']]
结果(包括空格):
updated page title
second text
third text
具有 span
父级
的第一个文本节点
//h2[@class='cmp-title__text']/descendant::text()[parent::*[name()='span']][1]
同于:
//span[1]/text()
我只想从下面的代码中获取文本 updated page title
<h2 class="cmp-title__text" xpath="1">
updated page title
<span class="gmt_style" aria-hidden="true">Tue, 20 Jul 2021 13:19:22 GMT</span></h2>
我试过下面的方法,但它也从 span 标签中获取文本,即 Tue , 20 Jul 2021 13:!9:22 GMT
。
var pgTitle=element(by.xpath("//h2[@class='cmp-title__text']"));
var pgTitleFromApp = await translatedPgTitle.getText();
输出:
+updated page title
+Tue, 20 Jul 2021 14:02:35 GMT
请帮忙解决这个问题!
您可以拆分从 getText()
像这样:
var all = pgTitleFromApp.split(' ');
var title = all[0] + all[1] + all[2];
免责声明:下一个答案可能不适合您使用的技术方法,答案仅包含纯 javascript 解决方案。
在你的情况下,你可以只使用 Node.firstChild
。但它只适用于文本总是第一个 child 的情况。
如果您的文本可以放置在任何其他序列中,您可以使用 Node.childNodes
to get all nodes, filter nodes by checking Node.nodeType
如果它等于 Node.TEXT_NODE
并且只留下文本节点。
<div class="wrapper">
Some text 1
<h1>Some text 2</h2>
</div>
const wrapper = document.querySelector('.wrapper')
const parentTextNode = [...wrapper.childNodes]
.filter(node => node.nodeType === Node.TEXT_NODE)[0];
console.log(parentTextNode); // Some text 1
Xpaths 获取 text
给定此 html 片段的节点:
<h2 class="cmp-title__text">
updated page title
<span>Tue, 20 Jul 2021 13:19:22 GMT</span>
second text
<span>Tue, 20 Jul 2021 13:19:22 GMT</span>
third text
</h2>
可以使用此 xpath 访问第一个文本节点
//h2[@class='cmp-title__text']/text()[1]
第二个:
//h2[@class='cmp-title__text']/text()[2]
没有 span
作为父节点的文本节点:
//h2[@class='cmp-title__text']/descendant::text()[parent::*[name()!='span']]
结果(包括空格):
updated page title
second text
third text
具有 span
父级
//h2[@class='cmp-title__text']/descendant::text()[parent::*[name()='span']][1]
同于:
//span[1]/text()