从InkScape加载svg文件后,我想向程序控制下创建的图形添加新元素。这似乎工作正常,如果我们只是改变已存在的元素的属性,但新创建的,即使它们在检查DOM时出现,也不会显示!向加载的svg文件动态添加元素
一个手 - 简易SVG测试文件:
<svg id="svg8" width="1e3" height="750" version="1.1"
viewBox="0 0 264.58333 198.43751" xmlns="http://www.w3.org/2000/svg">
<g id="layer"><circle id="cc0" cx="20" cy="20" r="10"/></g>
</svg>
的JavaScript/HTML文件:
<!doctype html><html><head><meta charset="UTF-8"/>
<script>
function addCircle() {
var svgDoc = document.getElementById("test");
var svg = svgDoc.contentDocument;
var svgns = svgDoc.namespaceURI;
// Ok, this changes the circle to red
var c0 = svg.getElementById("cc0");
c0.setAttribute("fill", "#ff0000");
var layer = svg.getElementById("layer");
// Create a circle inside layer "g"
var cc = document.createElementNS(svgns, "circle");
cc.setAttribute("cx", "50");
cc.setAttribute("cy", "50");
cc.setAttribute("r", "20");
layer.appendChild(cc);
// However it's not updating the screen
// even if DOM shows the circle is there, inside the "g"
}
</script></head>
<body>
<object id="test" data="test.svg" type="image/svg+xml"></object>
<script>
document.onreadystatechange = function(){
if(document.readyState === 'complete') addCircle(); }
</script>
</body>
</html>
我在做什么错?或者我错过了什么?谢谢!
您使用Chrome,并且从本地文件是(即file://)? 你可以在不同的浏览器中试用它吗? –
我试过Linux/Ubuntu 16.0.4中的Chrome 57和Firefox 52。它不是一个本地文件,但它由运行在与浏览器相同的机器上的apache服务器提供服务。 (在http://127.0.0.1/X.html) – Francisco