web-dev-qa-db-ja.com

DOMを使用して既存のSVGにSVG要素を追加する

次のコードに似た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に渡す要素の作成方法についてはあまり詳しくないので、これを手伝ってください。または、この問題を解決するために他にどのような選択肢があるのか​​教えてください。どうもありがとう。

71
biggdman

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/en-US/docs/Web/API/Document/createElement

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

164
m93a

JSを使用してsvgを多数処理している場合は、d3.jsを使用することをお勧めします。それをページに含めて、次のようなことをしてください。

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