javascript - IE 支持 DOM importNode

标签 javascript internet-explorer dom

我一直在网上四处寻找,我很确定我已经知道答案(“否”),但我想检查一下:

IE 支持 importNode() 了吗?有没有比遍历 DOM 和创建节点更好的选择? (我见过 the clasic article by Anthony Holdener 但现在已经一年多了,我希望 IE 已经进化,或者有人有其他解决方法)

谢谢。

最佳答案

Internet Explorer 9 DOM API 中有一个函数 document.importNode()。但是IE9在调用时会抛出脚本错误

SCRIPT16386: No such interface supported

还需要定义源节点的命名空间(例如,当我们要导入 SVG - In IE9, Imported nodes do not seem to be recognized as SVG Elements )

Phrogz建议this有用的解决方法。但是,当我们导入具有特殊命名空间的元素(在 xmlns 属性中声明,例如 <svg xmlns="http://www.w3.org/2000/svg" …>…</svg> )时,clone.setAttributeNS(a.namespaceURI,a.nodeName,a.nodeValue) 中会出现错误。因为属性 xmlns 的 namespaceURI 为空。

有适合​​我的解决方法:

var newNode;
try {
  newNode = document.importNode(sourceDocumentElement, true);
}
catch(e) {
  newNode = importNode(sourceDocumentElement, true);
}

function importNode(node, allChildren) {
  switch (node.nodeType) {
    case document.ELEMENT_NODE:
      var newNode = document.createElementNS(node.namespaceURI, node.nodeName);
      if(node.attributes && node.attributes.length > 0)
        for(var i = 0, il = node.attributes.length; i < il; i++)
          newNode.setAttribute(node.attributes[i].nodeName, node.getAttribute(node.attributes[i].nodeName));
      if(allChildren && node.childNodes && node.childNodes.length > 0)
        for(var i = 0, il = node.childNodes.length; i < il; i++)
          newNode.appendChild(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;
  }
}

关于javascript - IE 支持 DOM importNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1811116/

相关文章:

javascript - 以编程方式决定在 javascript 中修改哪个样式属性

javascript - 将多组参数分配给 jQuery 函数

javascript - 未处理的拒绝(语法错误): Unexpected end of input

css - 链接 rel ="stylesheet"在 MSIE 中不起作用

javascript - 将 AJAX 内容放入 DOM 中或通过 onClick 事件向 jQuery 注册对象?

javascript - Ctrl+单击呈现局部 View 的链接

internet-explorer - 如何防止IE对话框 "Always Ask Before Opening This Type of Address"打开?

css - 在 IE 和 Firefox 中换行长文本

javascript - 您可以在 HTML 标记的 onclick 上使用 "this"属性吗?

javascript - 浏览器 EventListenerList 实现