通過XHR獲取SVG文檔後,您將在xhr.responseXML
屬性中擁有單獨的XML文檔。由於您無法合法地將節點從一個文檔移動到另一個文檔,因此您需要將一個文檔所需的部分導入目標文檔,然後才能將其作爲該文檔的一部分使用。
要做到這一點,最簡單的方法是使用document.importNode()
:
var clone = document.importNode(nodeFromAnotherDoc,true);
// Now you can insert "clone" into your document
然而,this does not work for IE9。要解決這個bug,您也可以使用此功能選擇的文件中遞歸地重新創建節點層次結構:
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
在邁克或@Progrog:可以編程方式測試這個'使用'功能沒有瀏覽器嗅探? – 2011-10-07 22:43:39
相關問題 - http://stackoverflow.com/questions/1811116/ie-support-for-dom-importnode – resnyanskiy 2012-03-26 03:13:38