问候。这是我的服务器在responseXML对象中返回的XML对象:
<tableRoot>
<table>
<caption>howdy!</caption>
<tr>
<td>hello</td>
<td>world</td>
</tr>
<tr>
<td>another</td>
<td>line</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
现在我将此片段附加到我的文档树中,如下所示:
getElementById('entryPoint').appendChild(responseXML.firstChild.firstChild);
但我没有呈现为表格,而是得到以下文本:
你好!你好世界另一条线
我仅用firstChild 替换firstChild.firstChild 会发生相同的结果。看起来我刚刚获取了节点值,所有标签都被删除了?!我是否从根本上误解了responseXML对象应该代表什么?顺便说一句,如果我取出“root”标签,并将innerHTML 设置为responseText,那么这是有效的。
有人可以告诉我使用responseXML 的正确方法吗?
您得到的是文本而不是表格,因为您使用纯 DOM 进行操作,并且您的响应 XML 没有名称空间声明。因此,当附加 XML 元素时,浏览器不知道您的“table”标签是来自 HTML、XUL、SVG 还是其他。
1)添加命名空间声明:
<table xmlns="http://www.w3.org/1999/xhtml">
Run Code Online (Sandbox Code Playgroud)
2) 您应该首先将该节点导入到 HTML DOM 文档中,而不是直接插入引用的 XML DOM 元素:
var element = document.importNode(responseXML.firstChild.firstChild, true);
document.getElementById('entryPoint').appendChild(element);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!