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

big*_*man 71 html javascript html5 svg dom

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

<div id='intro'>
<svg>
//draw some svg elements
<svg>
</div>
Run Code Online (Sandbox Code Playgroud)

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

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

我对使用DOM不太熟悉,或者如何创建要传递给appendChild的元素,所以请帮我解决这个问题,或者告诉我还有什么其他选择来解决这个问题.非常感谢.

m93*_*93a 167

如果要创建HTML元素,请使用document.createElementfunction.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);
Run Code Online (Sandbox Code Playgroud)

这段代码会产生如下代码:

<svg>
 <path d="M 0 0 L 10 10" style="stroke: #000; stroke-width: 5px;" />
</svg>
Run Code Online (Sandbox Code Playgroud)



createElement:https: //developer.mozilla.org/en-US/docs/Web/API/Document/createElement

createElementNS:https: //developer.mozilla.org/en-US/docs/Web/API/Document/createElementNS

  • 这怎么不上图?哦,是的,命名空间:每次都得到我。 (4认同)
  • Upvoting因为有用的答案而且因为Hackerman (2认同)

rag*_*el3 12

如果你使用JS处理svg很多,我推荐使用d3.js. 将其包含在您的网页上,并执行以下操作:

d3.select("#svg1").append("circle");
Run Code Online (Sandbox Code Playgroud)

  • 我想使用普通的javascript,没有外部库或函数 (27认同)