繁体   English   中英

如何操作SVG DOM并创建元素?

[英]How do I manipulate the SVG DOM and create elements?

如何获取SVG DOM根目录,并以编程方式开始向其添加子项,而不是通过标记添加SVG元素?

<svg xmlns="http://www.w3.org/2000/svg">
  <script>
    var svg   = document.documentElement;
    var svgNS = svg.namespaceURI;

    var circle = document.createElementNS(svgNS,'circle');
    circle.setAttribute('cx',100);
    circle.setAttribute('cy',200);
    circle.setAttribute('r',50);
    circle.setAttribute('fill','red');
    circle.setAttribute('stroke','black');
    circle.setAttribute('stroke-width','20px');
    circle.setAttribute('stroke-opacity','0.5');

    svg.appendChild(circle);
  </script>
</svg>

见过: http//phrogz.net/SVG/create-circle.svg

因为发出所有这些setAttribute调用会非常麻烦,所以我经常使用这样的函数:

// Create an SVG element on another node with a set of attributes.
// Attributes with colons in the name (e.g. 'xlink:href') will automatically
// find the appropriate namespace URI from the SVG element.
// Optionally specify text to create as a child node, for example
//   createOn(someGroup,'text',{x:100,'text-anchor':'middle'},"Hello World!");
function createOn(root,name,attrs,text){
  var doc = root.ownerDocument, svg = root;
  while (svg.tagName!='svg') svg = svg.parentNode;
  var el = doc.createElementNS(svg.namespaceURI,name);
  for (var a in attrs){
    if (!attrs.hasOwnProperty(a)) continue;
    var p = a.split(':');
    if (p[1]) el.setAttributeNS(svg.getAttribute('xmlns:'+p[0]),p[1],attrs[a]);
    else el.setAttribute(a,attrs[a]);
  }
  if (text) el.appendChild(doc.createTextNode(text));
  return root.appendChild(el);
}

在行动中,上述文件变得更加简单:

<svg version="1.1" baseProfile="full" xmlns="http://www.w3.org/2000/svg">
  <script>
    var svg = document.documentElement;
    createOn(svg,'circle',{
      cx:100, cy:200, r:50,
      fill:'red', stroke:'black',
      'stroke-width':'20px', 'stroke-opacity':0.5
    });
    // …function from above…
  </script>
</svg>

见于行动: http//phrogz.net/svg/create-circle-2.svg

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM