2011-10-05 65 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)”来代替。 –