Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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的appendChild在IE9.0中带来了一个层次结构\u请求\u错误(3)_Javascript_Svg_Internet Explorer 9 - Fatal编程技术网

Javascript 带有SVG的appendChild在IE9.0中带来了一个层次结构\u请求\u错误(3)

Javascript 带有SVG的appendChild在IE9.0中带来了一个层次结构\u请求\u错误(3),javascript,svg,internet-explorer-9,Javascript,Svg,Internet Explorer 9,下面的代码在chrome和Firefox中运行良好,但在IE9.0中出现中断 //select div where svg is to be inserted var selSVG = document.getElementById('SVGMap'); //clear any SVG while (selSVG.hasChildNodes()) { selSVG.removeChild(selSVG.lastChild); } //add the new svg selSVG.appendCh

下面的代码在chrome和Firefox中运行良好,但在IE9.0中出现中断

//select div where svg is to be inserted
var selSVG = document.getElementById('SVGMap');
//clear any SVG
while (selSVG.hasChildNodes()) {
selSVG.removeChild(selSVG.lastChild);
}
//add the new svg
selSVG.appendChild(loadXML("roomlayouts/"+SelectedRoomAddress));
loadXML(…)从另一个文件夹返回svg文档,并且DOM异常的最后一行出现错误:HIERARCHY_REQUEST_ERR(3)第300行字符2

你知道为什么它在IE 9.0中不起作用吗

实现如下:

您需要将加载文档中的元素添加到selSVG的文档中,然后才能附加它。根据规范,您将执行以下操作:

var room = loadXML(...);
if (room.nodeType==9){         // You can't import entire documents, so
  room = room.documentElement; // get the root node of the document
}
room = selSVG.ownerDocument.importNode( room );
selSVG.appendChild( room );

但是,IE9没有正确实现
importNode
。我已经为此提供了一种解决方法,作为我对这个问题回答的一部分:

加载XML究竟返回了什么?
loadXML
?它返回完整的SVG文档例如:@999我应该说它返回SVG文件的documentelement。对不起,我只是仔细看了一下我的代码。函数复制到函数loadXML(url){var xmlhttp=new window.XMLHttpRequest();xmlhttp.open(“GET”,url,false);//停止讨厌的缓存!xmlhttp.setRequestHeader(“缓存控制”,“无缓存”);//如上所述xmlhttp.send(null);返回xmlhttp.responseXML.documentElement;}hi@Phrogz,我正在努力让它工作。我查看了附加的示例代码,它在IE9.0中不断出现以下错误:
无法获取属性“namespaceURI”的值:对象为null或未定义
在以下行
var clone=doc.createElementNS(node.namespaceURI,node.nodeName)澄清:loadXML(…)返回以下内容:
xmlhttp.responseXML.documentElement为了进一步澄清,我正在加载的SVG是在inkscape中创建的,并具有所有适当的名称空间信息,即:
xmlns=”http://www.w3.org/2000/svg“
@pluke制作一个显示此问题的测试用例,如果您需要进一步帮助,请将其在线托管;否则,您将需要学习调试。(提示:该错误意味着
node
的值为空。您需要找出原因。)嗨@Phrogz,我发现了问题。inkscape输出的SVG具有比
xmlns=”更多的命名空间信息http://www.w3.org/2000/svg“
例如:xmlns:svg=”“xmlns=”“xmlns:xlink=“”,如果(a.nodeName==“xmlns”)继续,则您的代码
;clone.setAttributeNS(a.namespaceURI、a.nodeName、a.nodeValue)无法处理xmlns的子集。很抱歉响应太慢,我对Win7计算机的访问权限有限。试着加载这个:用你的example@pluke啊,你说得对。我已经修复了我的示例,在(/^xmlns\b/.test(a.nodeName))继续时使用
,并确认您的S110.svg文件能够通过该更改加载到IE9中。谢谢你的报告。