IE支持DOM importNode [英] IE support for DOM importNode

查看:102
本文介绍了IE支持DOM importNode的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在寻找网络,而且我确信我已经知道答案(否),但是我想检查一下:

I've been looking arround the web, and I'm fairly sure I already know the answer ("no"), but I'd like to check:

IE是否支持importNode()?有没有比走DOM和创建节点更好的选择? (我看过 Anthony Holdener的clasic文章,但现在一岁多,我希望IE已经发展,或有人有另一个工作环境)

Does IE support importNode() yet? Is there a better alternative than walking the DOM and creating nodes? (I've seen the clasic article by Anthony Holdener but its more than a year old now, and I'm hoping that either IE has evolved, or someone has another workarround)

谢谢。

推荐答案

我还没有听说过这个变化,而在,他指出:

I haven't heard this has changed yet, and in a recent post by John Resig, he states:


Internet Explorer不支持importNode或adoptNode

Internet Explorer doesn't support importNode or adoptNode

另请参阅这篇关于 cross-browser importnode(),因为它包含了Internet Explorer的特定解决方案。

Also see this A List Apart article on cross-browser importnode() as it includes a specific work-around for Internet Explorer.

引用后代,


我所有问题的解决方案是不使用一个DOM方法毕竟,而是使用我自己的实现。在这里,它的所有荣耀,是我的最终解决方案importNode()问题以符合跨浏览器的方式编码:(线包装标记为-Ed。)

The solution to all of my problems was to not use a DOM method after all, and instead use my own implementation. Here, in all of its glory, is my final solution to the importNode() problem coded in a cross-browser compliant way: (Line wraps marked » —Ed.)



if (!document.ELEMENT_NODE) {
  document.ELEMENT_NODE = 1;
  document.ATTRIBUTE_NODE = 2;
  document.TEXT_NODE = 3;
  document.CDATA_SECTION_NODE = 4;
  document.ENTITY_REFERENCE_NODE = 5;
  document.ENTITY_NODE = 6;
  document.PROCESSING_INSTRUCTION_NODE = 7;
  document.COMMENT_NODE = 8;
  document.DOCUMENT_NODE = 9;
  document.DOCUMENT_TYPE_NODE = 10;
  document.DOCUMENT_FRAGMENT_NODE = 11;
  document.NOTATION_NODE = 12;
}

document._importNode = function(node, allChildren) {
  switch (node.nodeType) {
    case document.ELEMENT_NODE:
      var newNode = document.createElement(node »
.nodeName);
      /* does the node have any attributes to add? */
      if (node.attributes && node.attributes »
.length > 0)
        for (var i = 0; il = node.attributes.length;i < il)
          newNode.setAttribute(node.attributes[i].nodeName, 
          node.getAttribute(node.attributes[i++].nodeName));
      /* are we going after children too, and does the node have any? */
      if (allChildren && node.childNodes && node.childNodes.length > 0)
        for (var i = 0; il = node.childNodes.length; i < il)
          newNode.appendChild(document._importNode(node.childNodes[i++], allChildren));
      return newNode;
      break;
    case document.TEXT_NODE:
    case document.CDATA_SECTION_NODE:
    case document.COMMENT_NODE:
      return document.createTextNode(node.nodeValue);
      break;
  }
};




这里正在使用:

Here it is in use:



var newNode = null, importedNode = null;

newNode = xhrResponse.responseXML.getElementsByTagName('title')[0].childNodes[0];
if (newNode.nodeType != document.ELEMENT_NODE)
  newNode = newNode.nextSibling;
if (newNode) {
  importedNode = document._importNode(newNode, true);
  document.getElementById('divTitleContainer').appendChild(importedNode);
  if (!document.importNode)
    document.getElementById('divTitleContainer').innerHTML = document.getElementById('divTitleContainer').innerHTML;
}

这篇关于IE支持DOM importNode的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆