stackoverflow上有两个问题
问题1:
SVG fragments are mistakenly parsed as HTMLUnknownElement
我便遇到了问题1描述的情况
这是HTML文件
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<svg id="s" viewBox="0 0 250 250" xmlns="http://www.w3.org/2000/svg" οnlοad="init(evt)">
<rect x="200" y="200" width="100" height="50" style="stroke-width:1; stroke:black;fill:black" οnclick="node2string(evt)" />
<rect x="100" y="100" width="100" height="50" style="stroke-width:1; stroke:red;fill:red" οnclick="string2node()" />
<script type="application/javascript" xlink:href="12-16.js"></script>
</svg>
</body>
</html>
这是js文件
function init(evt) {
svgdoc = evt.target.ownerDocument;
}
function node2string(evt) {
node = evt.target;
string = printNode(node);
alert(string);
}
function string2node() {
string = "<circle cx='20' cy='20' r='10' fill='#FFFFFF' stroke='#000000' />";
var parser = new DOMParser();
var doc = parser.parseFromString(string, "image/svg+xml");
svgdoc.getElementById('s').appendChild(doc.children[0]);
alert(1);
}
直接appendChild(node)在浏览器上并不显示,尽管chrome bug element上有相应的html element
纠结了一天,在stackoverflow上找到另一个问题
Add SVG element to existing SVG using DOM
function string2node() {
//string = "<circle cx='20' cy='20' r='10' fill='#FFFFFF' stroke='#000000' />";
//var parser = new DOMParser();
//var doc = parser.parseFromString(string, "image/svg+xml");
//var oo = svgdoc.getElementById('s').appendChild("circle");
//alert(1);
var svg = document.getElementsByTagName('svg')[0]; //Get svg element
var newElement = document.createElementNS("http://www.w3.org/2000/svg", 'circle'); //Create a path in SVG's namespace
newElement.setAttribute("cx", "20"); //Set path's data
newElement.setAttribute("cy", "20");
newElement.setAttribute("r", "10");
newElement.setAttribute("fill", "#FFFFFF");
newElement.style.stroke = "#000000"; //Set stroke colour
newElement.style.strokeWidth = "5px"; //Set stroke width
svg.appendChild(newElement);
}
这样问题搞定