2011-10-05 109 views
2

我有一個svg組,其中包含一些元素,我想克隆組,問題是該功能克隆組中只有一個元素。 下面是函數克隆svg組

<script type="text/ecmascript"><![CDATA[ 
    function clone(evt) { 
     var cloneElement = evt.target.cloneNode(false); 
     var newx = 100; 
     var newy = 500; 
     cloneElement.setAttributeNS(null,"x",newx); 
     cloneElement.setAttributeNS(null,"y",newy); 
     document.getElementById("layer1").appendChild(cloneElement); 
    } 

]]></script> 

SVG的看起來像

<g id="layer1" onclick="clone(evt)"> 
<rect> 
<path> 
<circle> 
<circle> 
</g> 

矩形就像一個容器,什麼情況是,該功能克隆矩形並保持其他元素。 那又怎麼了?

回答

10

兩件事情:如果你想有一個深深的克隆樹

  • cloneNode應該傳遞true,否則只會克隆一個元素
  • evt.target總是會產生事件的元素,和g元素從來沒有被直接擊中,鼠標事件只是從孩子們那裏冒出來。你可以使用evt.currentTarget來代替,如果你想要當前正在處理事件的元素(在你的情況下,這將是g元素)。
+1

它的工作!但克隆對象的座標並沒有改變到新的,所以我想我做錯了... – user979830

+2

g元素根據svg規範沒有'x'和'y'屬性,但是你可以使用transform =「translate(x,y)」來代替。 –