我正在使用XMLHttpRequest从服务器检索XML,我想将它附加到页面上的现有HTML节点。它是格式良好的HTML,我已经将xmlns='http://www.w3.org/1999/xhtml'
添加到响应中的XML根元素:适用于Firefox,但IE炸弹“没有支持这样的接口”,我想是因为它有我正在尝试的节点附加类型为“IXMLDOMElement”。
以下是XML响应:
<qstat xmlns='http://www.w3.org/1999/xhtml'>
<ul>
<li><b>Cycle number:</b> 6</li>
<li><b>Error:</b> none</li>
</ul>
</qstat>
这是Javascript:
var req = new XMLHttpRequest()
req.onreadystatechange = function() {
if(req.readyState == 4)
{
dom = req.responseXML;
var nodes = dom.firstChild.childNodes; //Everything under the root node.
var ele = document.getElementById("qstat");
for(var i=0; i<nodes.length; i++)
{
ele.appendChild(nodes[i]); // BOMBS HERE.
}
}
};
MSIE调试器(MSIE 8)正确地将nodes[0]
识别为tagName=ul
,甚至有namespaceURI="http://www.w3.org/1999/xhtml"
,但我想因为它的类型是IXMLDOMElement
,所以调用不会工作。
那么有没有办法将nodes
中的对象转换为可以附加到元素的相应HTML节点对象?
答案 0 :(得分:3)
请尝试以下操作:
1)创建一个HTML元素
var factory = document.createElement("div");
2)序列化获取XML元素
var xml = nodes[i].xml || new XMLSerializer().serializeToString(nodes[i]);
3)通过innerHTML渲染xml
factory.innerHTML = xml;
4)从工厂元素获取firstChild,现在是HTML元素
var eleHTML = factory.firstChild;
5)将eleHTML附加到您需要的地方:
ele.appendChild(eleHTML);
提示:您可以重复使用一次创建的工厂DOMHTML元素