无法在HTML DOM中显示已分析的SVG节点.为什么?

Cannot display parsed SVG node in the HTML DOM. Why?

本文关键字:SVG 节点 为什么 HTML DOM 显示      更新时间:2023-09-26

在下面的代码中,我尝试用两种不同的方式在屏幕上创建一个SVG圆。

var body = document.getElementsByTagName('body')[0];
var vis = document.createElementNS("http://www.w3.org/2000/svg", "svg");
body.appendChild(vis);
vis.setAttribute('width',400);
vis.setAttribute('height',300);
var xmlString = '<circle r="300"></circle>'
            , parser = new DOMParser()
            , doc = parser.parseFromString(xmlString, "text/xml");
c1 = doc.firstChild;
c2 = document.createElementNS("http://www.w3.org/2000/svg", "circle");
c2.setAttribute('r','300')
//for(x in c1) {c1[x] = c2[x]}
vis.appendChild(c1);

vis.appendChild(c1);不显示的第一种方式是,如果我用c2替换那一行的c1,它就可以工作了。此外,如果我放回c1,然后取消注释基本上将c2克隆到c1中的行,它仍然不起作用。

所以我知道,如果我不使用基本名称空间http://www.w3.org/2000/svg,浏览器不理解"圆"是什么,这肯定是个问题,但我不知道如何修复它

问题:如何解析任意svg字符串,将其插入DOM,并让浏览器了解如何显示它?

像这样使用基本(即SVG)命名空间有什么问题?

<circle r="300" xmlns="http://www.w3.org/2000/svg"></circle>