<![CDATA[test]]> 我得到了空白。
var dataNode=Ext.DomQuery.selectNode('data',xml); console.log(dataNode.childNodes[0].nodeValue); console.log(dataNode.nodeValue);
虽然我们不能肯定地说没有正在解析的 XML,但从childNodes[0]
( firstChild
) 中“获取空白”的通常原因是父级的开始标签和您正在寻找的节点之间有一个空白文本节点:
<data>
<![CDATA[ foo ]]>
</data>
在保留 CDATA 部分的 XML 解析器上,这将为data
元素提供三个子元素:一个包含换行符和一些空格的 Text 节点;CDATASection 节点;和另一个带有换行符的文本节点。
所以你可以接受childNodes[1]
,但它有点脆弱......特别是它会破坏将 CDATA 部分转换为文本的 XML 解析器,在那里你会得到一个包含foo
所有空格的 Text 子节点。可能更好地采用textContent
元素<data>
(当然除了innerText
IE 的回退)。
const parser = new DOMParser();
const xml = parser.parseFromString('XML_GOES_HERE', 'text/xml').documentElement;
const someElement = xml.getElementsByTagName('MY_TAG');
// using `wholeText` will allow us to read CDATA when it's located in a new line
const cdataValue = someElement?.firstChild?.wholeText?.trim();
尝试 .contents() 返回整个内容(包括 CDATA) - http://api.jquery.com/contents/