用XML元素替换HTMLElement

时间:2010-12-30 12:09:52

标签: javascript ajax

所以,我有一个带有不同div元素的HTML页面,我有一些加载xml文档的链接

XML文件看起来像这样:

<boxes>
 <div class="grid_4 box" id="siteBox">
  <h3>Lorem Ipsum</h3>
  <ul class="listItem">
   ...
  </ul>
 </div>
 <div class="grid_4 box" id="emplBox">
  <h3>Lorem Ipsum</h3>
  <ul class="listItem">
  ...
  </ul>
 </div>
</boxes>

我希望HTML页面中包含的所有div都被XML文件中的等效(相同ID)替换

这是我的javascript文件的开头。

function ajaxLink() {
 if (window.XMLHttpRequest) {
  xmlhttp = new XMLHttpRequest();
 } else {
  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 }

 xmlhttp.onreadystatechange=function() {
  if (xmlhttp.readyState==4 && xmlhttp.status==200) {

   var xmlDoc = xmlhttp.responseXML.documentElement;

   for(var i = 0; i < xmlDoc.childElementCount; ++i) {
    c = xmlDoc.children[i]; //Element
    d = document.getElementById(c.getAttribute("id")); //HTMLDivElement

   }
  }
 }

 xmlhttp.open("GET", "file.xml", true);
 xmlhttp.send();
}

你能帮帮我吗?

谢谢

托马斯

2 个答案:

答案 0 :(得分:0)

`var newNode = document.createElement('div');

//将ID,CLASS和innerHTML从c分配给newNode //

d.parentNode.replaceChild(newNode,d);`

答案 1 :(得分:0)

此代码未经测试。我想我会遵循你想做的事情。在返回响应之后的循环中,使用xml节点的innerXML更新文档节点的innerHTML。因为我不知道在Firefox和Chrome中获取innerXml的简单方法。

var tmp = document.createElement('div');
for(var i = 0; i < xmlDoc.childElementCount; ++i) {
    c = xmlDoc.children[i]; //Element
    d = document.getElementById(c.getAttribute("id")); //HTMLDivElement
    if (d) { 
        var xml = getXml(c);
        tmp.innerHTML = xml;
        d.innerHTML = tmp.firstChild.innerHTML;
    }
}

这是因为IE有一种不同的序列化XML方法。我不确定outerXML是您想要的,可能是xmlouterXml

function getXml(node) {
    if (window.XMLSerializer) {
        return new XMLSerializer().serializeToString(node);
    }

    if (node.outerXML) {
        return node.outerXML;
    }

    return '';
}