Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将SVG节点导入IE9中的另一个文档_Javascript_Svg_Internet Explorer 9 - Fatal编程技术网

Javascript 将SVG节点导入IE9中的另一个文档

Javascript 将SVG节点导入IE9中的另一个文档,javascript,svg,internet-explorer-9,Javascript,Svg,Internet Explorer 9,在使用XHR获取SVG文档之后,我需要将它的一部分从responseXML文档附加到当前文档中。使用此代码在Safari/Chrome/FireFox上有效,但在IE9上不起作用: var xhr = new XMLHttpRequest; xhr.open('get','stirling4.svg',true); xhr.onreadystatechange = function(){ if (xhr.readyState != 4) return; var g = xhr.respo

在使用XHR获取SVG文档之后,我需要将它的一部分从
responseXML
文档附加到当前文档中。使用此代码在Safari/Chrome/FireFox上有效,但在IE9上不起作用:

var xhr = new XMLHttpRequest;
xhr.open('get','stirling4.svg',true);
xhr.onreadystatechange = function(){
  if (xhr.readyState != 4) return;
  var g = xhr.responseXML.getElementsByTagName('g')[2];
  var p = document.getElementsByTagName('path')[0];
  p.parentNode.insertBefore(document.importNode(g,true),p);
};
xhr.send();
IE9在调用importNode时引发脚本错误:

SCRIPT16386:不支持此类接口

我发现有人报告了类似的问题。你可以看到这个问题的一个活生生的例子。(SVG文件本身显示一个分形,使用XHR提取,使用一种技术手动导入一个节点,然后尝试使用
importNode
导入另一个节点。在Chrome、Safari或Firefox中,您会看到两个灰色菱形导入到文档中,而在IE9中,只有第一个菱形起作用。)


如何使
importNode
与IE9协同工作?

这里有一个变通解决方案,通过使用自定义函数递归克隆节点的所有部分,而不是使用
importNode
手动“导入”节点。此代码用于导入两个形状中的一个

var xhr = new XMLHttpRequest;
xhr.open('get','stirling4.svg',true);
xhr.onreadystatechange = function(){
  if (xhr.readyState != 4) return;
  var g = xhr.responseXML.getElementsByTagName('g')[2];
  var p = document.getElementsByTagName('path')[0];
  p.parentNode.insertBefore(cloneToDoc(g),p);
};
xhr.send();

function cloneToDoc(node,doc){
  if (!doc) doc=document;
  var clone = doc.createElementNS(node.namespaceURI,node.nodeName);
  for (var i=0,len=node.attributes.length;i<len;++i){
    var a = node.attributes[i];
    clone.setAttributeNS(a.namespaceURI,a.nodeName,a.nodeValue);
  }
  for (var i=0,len=node.childNodes.length;i<len;++i){
    var c = node.childNodes[i];
    clone.insertBefore(
      c.nodeType==1 ? cloneToDoc(c,doc) : doc.createTextNode(c.nodeValue),
      null
    );
  }
  return clone;
}
var xhr=newxmlhttprequest;
open('get','stirling4.svg',true);
xhr.onreadystatechange=函数(){
如果(xhr.readyState!=4)返回;
var g=xhr.responseXML.getElementsByTagName('g')[2];
var p=document.getElementsByTagName('path')[0];
p、 parentNode.insertBefore(cloneToDoc(g),p);
};
xhr.send();
函数cloneToDoc(节点,文档){
如果(!doc)doc=单据;
var clone=doc.createElements(node.namespaceURI,node.nodeName);

对于(var i=0,len=node.attributes.length;如果有人能找到一个解决方案,允许
importNode
正确工作,我很乐意接受一个更好的解决方案。相关问题-