Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将textNode内容转换为字符串_Javascript_Xpath_Textnode - Fatal编程技术网

Javascript 将textNode内容转换为字符串

Javascript 将textNode内容转换为字符串,javascript,xpath,textnode,Javascript,Xpath,Textnode,无法转换为字符串的textNode出现问题。 我试图从一个站点中获取某些信息,当我使用XPath查找该文本时,我是在得到一个textNode之后。 当我在chrome中查看google开发工具时,我可以确定textNode本身包含我要查找的文本,但是如何将textNode转换为纯文本呢 以下是我使用的代码行: abstracts = ZU.xpath(doc, '//*[@id="abstract"]/div/div/par/text()'); 我曾经尝试过使用.innerHTML、toStr

无法转换为字符串的textNode出现问题。 我试图从一个站点中获取某些信息,当我使用XPath查找该文本时,我是在得到一个textNode之后。 当我在chrome中查看google开发工具时,我可以确定textNode本身包含我要查找的文本,但是如何将textNode转换为纯文本呢

以下是我使用的代码行:

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

我曾经尝试过使用.innerHTML、toString、textContent之类的东西,但到目前为止都没有效果

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

示例:来自

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

语法

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.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只是文本节点的一个属性,它返回组成所有相邻(即未被元素边界分隔)文本节点组合的数据字符串

现在让我们回到原来的问题。我们想要的是能够用新的文本替换整个文本。这就是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或longting Element.innerHTML可以更好地使用全文功能;这很好,在大多数情况下可能更清楚。如图所示,如果必须处理元素中的混合内容,wholeText和replaceWholeText()可能会很有用


更多信息:

是否尝试console.log(摘要)查看它包含的内容?我不知道ZU是什么,但大多数xpath查询方法都返回一个节点列表,您必须从中获取数据。出于某种原因,我无法在我正在构建的扩展中使用它。但是如果我使用Firebug或Googledev工具并使用xpath,我可以使用Abstracts中应该返回的内容,这是一个textNode。Zu只是我当前尝试扩展的程序中已声明的一个。您需要阅读XPath库的文档,该库为您提供
Zu.XPath
方法,以查看它返回的结果类型。如果它是W3C DOM节点,那么您可以读取它的
nodeValue
属性,但一般来说,路径选择节点可以返回各种节点,方法也可以返回集合或迭代器。为简单起见,其他API可能会返回字符串值。因此,我们无法真正说出
ZU.xpath
返回的内容,我们需要查看API文档。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能无效。-添加了来自
para.firstChild.replaceWholeText("Thru-hiking is great, but ");
<p>Thru-hiking is great, but <a
href="http://en.wikipedia.org/wiki/Absentee_ballot">casting a
ballot</a> is tricky.</p>