将textNode内容转换为字符串

时间:2015-10-30 06:34:36

标签: javascript xpath textnode

我无法将textNode转换为字符串。 我正在尝试抓取一个网站并从中获取某些信息,当我使用XPath查找此文本时,我得到了一个textNode。 当我在chrome中查看google开发工具时,我可以看到textNode本身包含我之后的文本,但是如何将textNode转换为纯文本?

这是我使用的代码行:

abstracts = ZU.xpath(doc, '//*[@id="abstract"]/div/div/par/text()');

我曾尝试使用像.innerHTML,toString,textContent这样的东西,但到目前为止还没有任何工作。

1 个答案:

答案 0 :(得分:2)

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

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

示例

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

<强>语法

str = textnode.wholeText;

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

<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>

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

para.removeChild(para.childNodes[1]);

后来,你决定改写一些事情,“徒步旅行很棒,但投票很棘手。”同时保留了超链接。所以你试试这个:

para.firstChild.data = "Thru-hiking is great, but ";

一切都准备好吧?错误!发生了什么事情你删除了强元素,但删除的句子的元素分隔了两个文本节点。一个用于第一个句子,一个用于最后一个用语。相反,你现在实际上有这个:

<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访问所有这些节点的内容。让我们假装你从未犯过最后一个错误。在这种情况下,我们有:

assert(para.firstChild.wholeText == "Thru-hiking is great!    However, ");

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

现在让我们回到原来的问题。我们想要的是能够用新文本替换整个文本。这就是replaceWholeText()的用武之地:

para.firstChild.replaceWholeText("Thru-hiking is great, but ");

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

<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