SVG下appendChild(node)在浏览器中不显示的问题

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);
}


这样问题搞定



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值