使用DOM将SVG元素添加到现有SVG中


78

我有一个类似于以下代码的HTML构造:

<div id='intro'>
<svg>
//draw some svg elements
<svg>
</div>

我希望能够使用javascript和DOM向上面定义的SVG中添加一些元素。我该怎么做?我在想

var svg1=document.getElementById('intro').getElementsByTagName('svg');
svg1[0].appendChild(element);//element like <line>, <circle>

我对使用DOM或如何创建要传递给appendChild的元素不是很熟悉,因此请帮助我解决这个问题,或者向我展示解决该问题的其他替代方法。非常感谢。

Answers:


184

如果要创建HTML元素,请使用document.createElement函数。SVG使用名称空间,这就是为什么必须使用document.createElementNS函数的原因。

var svg = document.getElementsByTagName('svg')[0]; //Get svg element
var newElement = document.createElementNS("http://www.w3.org/2000/svg", 'path'); //Create a path in SVG's namespace
newElement.setAttribute("d","M 0 0 L 10 10"); //Set path's data
newElement.style.stroke = "#000"; //Set stroke colour
newElement.style.strokeWidth = "5px"; //Set stroke width
svg.appendChild(newElement);

这段代码将产生如下内容:

<svg>
 <path d="M 0 0 L 10 10" style="stroke: #000; stroke-width: 5px;" />
</svg>



createElementhttps : //developer.mozilla.org/zh-CN/docs/Web/API/Document/createElement

createElementNShttps : //developer.mozilla.org/zh-CN/docs/Web/API/Document/createElementNS


1
我懂了Uncaught TypeError: Cannot read property 'setAttribute' of null
B 2015年

@Rvervuur​​t嘿,您在处理我的帖子吗?:D
m93a 2015年

@ m93a删除不必要的图像。如果您想享受图片的乐趣,可以去论坛或聊天,这里的内容分散了您的注意力:)
Rvervuur​​t

3
为什么不画图?哦,是的,命名空间:每次都会得到我。
卢卡斯(Lucas)

应当注意,与人们的想法相反,至少在Chrome中,您最常newElement.setAttribute()将属性设置为相反newElement.setAttributeNS()
dotnetCarpenter

12

如果您使用JS处理大量的svg,我建议使用d3.js。将其包含在您的页面上,然后执行以下操作:

d3.select("#svg1").append("circle");

37
我想使用普通的javascript来实现,而无需外部库或函数
biggdman 2013年

正是我所需要的!谢谢。
EvertW
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.