首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将textNode内容转换为字符串

将textNode内容转换为字符串
EN

Stack Overflow用户
提问于 2015-10-30 06:34:35
回答 1查看 5K关注 0票数 1

textNode出现问题,无法转换为字符串。我试图刮一个网站并从中获取某些信息,当我使用XPath查找这个文本时,我会得到一个textNode。当我在chrome中查看时,我可以看到textNode本身包含我想要的文本,但是如何将textNode转换成纯文本呢?

下面是我使用的代码行:

代码语言:javascript
复制
abstracts = ZU.xpath(doc, '//*[@id="abstract"]/div/div/par/text()');

我试过使用像.innerHTML,toString,textContent这样的东西,但是到目前为止还没有起作用。

EN

回答 1

Stack Overflow用户

发布于 2018-06-14 08:35:59

我通常使用Text.wholeText,如果我想看到一个textNode的内容字符串,因为textNode是一个对象,所以使用toString或innerHTML将无法工作,因为它是一个对象,而不是字符串本身。

示例:来自https://developer.mozilla.org/en-US/docs/Web/API/Text/wholeText

Text.wholeText只读属性返回逻辑上与节点相邻的所有文本节点的全文。文本按文档顺序连接。这允许指定任何文本节点,并以单个字符串的形式获取所有相邻文本。

语法

代码语言:javascript
复制
str = textnode.wholeText;

注释和示例:假设您的网页中有以下简单段落(在这里添加了一些空格以帮助格式化代码示例),其DOM节点存储在变量段中:

代码语言:javascript
复制
<p>Thru-hiking is great!  <strong>No insipid election coverage!</strong>
However, <a href="http://en.wikipedia.org/wiki/Absentee_ballot">casting a
ballot</a> is tricky.</p>

你决定不喜欢中间的句子,所以你把它删除:

代码语言:javascript
复制
para.removeChild(para.childNodes[1]);

后来,你决定把事情改头换面,“徒步旅行很棒,但投票却很棘手。”同时保存超链接。所以你试试这个:

代码语言:javascript
复制
para.firstChild.data = "Thru-hiking is great, but ";

都准备好了对吧?不对!所发生的事情是删除了强元素,但删除语句的元素分隔了两个文本节点。第一句是一句,最后一句是第一句。相反,您现在实际上拥有以下内容:

代码语言:javascript
复制
<p>Thru-hiking is great, but However, <a
href="http://en.wikipedia.org/wiki/Absentee_ballot">casting a
ballot</a> is tricky.</p>

您确实希望将所有相邻的文本节点作为一个单独的节点来处理。这就是wholeText出现的地方:如果您有多个相邻的文本节点,您可以使用wholeText访问所有这些节点的内容。假装你从没犯过最后一个错误。在这种情况下,我们有:

代码语言:javascript
复制
assert(para.firstChild.wholeText == "Thru-hiking is great!    However, ");

wholeText只是文本节点的一个属性,它返回组成所有相邻文本节点(即不被元素边界分隔)的数据字符串。

现在让我们回到原来的问题。我们想要的是能够用新案文取代整个案文。这就是replaceWholeText()出现的原因:

代码语言:javascript
复制
para.firstChild.replaceWholeText("Thru-hiking is great, but ");

我们将删除每个相邻的文本节点(构成整个文本的所有节点),但删除调用replaceWholeText()的节点,并将其余的节点更改为新文本。我们现在拥有的是:

代码语言:javascript
复制
<p>Thru-hiking is great, but <a
href="http://en.wikipedia.org/wiki/Absentee_ballot">casting a
ballot</a> is tricky.</p>

使用Node.textContent或长期使用的Element.innerHTML可以更好地使用全文功能;这在大多数情况下都很好,而且可能更清晰。如果您必须处理元素中的混合内容,如这里所示,wholeText和replaceWholeText()可能是有用的。

更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Text/wholeText

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33430060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档