從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