После получения документа SVG через XHR у вас будет отдельный XML-документ в свойстве xhr.responseXML
.Поскольку вы не можете легально перемещать узлы из одного документа в другой, вам нужно импортировать нужную часть из одного документа в целевой документ, прежде чем вы сможете использовать его как часть этого документа.
Самый простой способ сделать это - использовать document.importNode()
:
var clone = document.importNode(nodeFromAnotherDoc,true);
// Now you can insert "clone" into your document
Однако это не работает для IE9 .Чтобы обойти эту ошибку, вы можете альтернативно использовать эту функцию для рекурсивного воссоздания иерархии узлов в документе по выбору:
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;
}
Вы можете увидеть пример использования XHR для получения документа SVG и оба методаимпорт узла на мой сайт: http://phrogz.net/SVG/fetch_fragment.svg