textNode出现问题,无法转换为字符串。我试图刮一个网站并从中获取某些信息,当我使用XPath查找这个文本时,我会得到一个textNode。当我在chrome中查看时,我可以看到textNode本身包含我想要的文本,但是如何将textNode转换成纯文本呢?
下面是我使用的代码行:
abstracts = ZU.xpath(doc, '//*[@id="abstract"]/div/div/par/text()');我试过使用像.innerHTML,toString,textContent这样的东西,但是到目前为止还没有起作用。
发布于 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只读属性返回逻辑上与节点相邻的所有文本节点的全文。文本按文档顺序连接。这允许指定任何文本节点,并以单个字符串的形式获取所有相邻文本。
语法
str = textnode.wholeText;注释和示例:假设您的网页中有以下简单段落(在这里添加了一些空格以帮助格式化代码示例),其DOM节点存储在变量段中:
<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
https://stackoverflow.com/questions/33430060
复制相似问题