2011-10-05 5 views
2

J'ai un groupe de svg qui contient quelques éléments, je veux cloner le groupe, le problème est la fonction clone seulement un élément du groupe. Voici la fonctionClonage d'un groupe de 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> 

Le svg ressemble à

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

Le rectangle est comme un récipient et ce qui se passe est que la fonction clone le rectangle et laisse les autres éléments. Alors qu'est-ce qui ne va pas?

Répondre

10

Deux choses:

  • cloneNode devrait être adopté vrai si vous voulez un arbre cloné en profondeur, sinon il va juste cloner un élément
  • evt.target sera toujours l'élément où l'événement est originaire, et les éléments g ne sont jamais touchés directement, les événements de la souris viennent juste de là. Vous pouvez utiliser evt.currentTarget à la place si vous voulez l'élément qui gère actuellement l'événement (dans votre cas, ce serait l'élément g).
+1

cela a fonctionné! mais les coordonnées de l'objet cloné n'ont pas changé aux nouvelles, donc je suppose que je le fais mal ... – user979830

+2

l'élément g n'a pas les attributs 'x' et 'y' selon la spécification svg, mais vous peut utiliser transform = "translate (x, y)" à la place. –