2013-05-10 65 views
53

我有一個HTML結構類似於下面的代碼:加入SVG元素,以現有的SVG使用DOM

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

我希望能夠添加到SVG一些元素上面使用JavaScript和DOM定義。我將如何實現這一目標?我在想

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

我不是很熟悉使用DOM,或者如何創建元素傳遞給使用appendChild所以請幫助我走出這或許證明我是有什麼其他辦法來解決這個問題。非常感謝。

回答

122

。 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

+1

我得到'Uncaught TypeError:無法讀取屬性'null'的setAttribute'。 – 2015-01-06 01:25:26

+0

顯示代碼。 SVG元素是否存在? – m93a 2015-01-07 14:02:27

+2

Upvoting因爲有用的答案,因爲Hackerman – 2015-07-13 15:03:03

9

如果你使用JS處理svg的很多,我推薦使用d3.js.它包含您的網頁上,而做這樣的事情:如果你想創建一個HTML元素,使用document.createElement功能

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

我想用PLA做在JavaScript中,沒有外部庫或函數 – biggdman 2013-05-10 19:03:10

+0

正是我所需要的!謝謝。 – EvertW 2015-05-23 15:34:42