2013-01-11 2 views
0

Voici du code. Il a mal nommé les variables et est faux. L'exemple original n'avait que des cercles, c'est pourquoi le cercle est sélectionné mais maintenant il a des groupes. Cependant, ce code fonctionne correctement pour le moment. Il dessine des carrés et des cercles comme je m'y attends. Utilisation de la console, je vois «cercle» est Array[3] mais je ne peux pas comprendre ce que sont les éléments ou leur type. Depuis son démarrage, comment est-il possible de faire 3 puisque aucun élément svg n'a été créé?Qu'est-ce que D3 sélectionne exactement?

De toute façon je me demandais quel cercle devrait vraiment être appelé? Faire un select tout sur "g" semble me donner le même effet. Je suppose que selectAll essaie de faire un select et a 0 éléments mais continue à fonctionner en quelque sorte ou peut-être selectAll retourne réellement svg mais dans ce cas, pourquoi suis-je en train de créer une nouvelle variable. Aussi je ne suis pas exactement sûr pourquoi les exemples et moi faisons des données là-dessus. Le cercle retourne-t-il réellement un objet interne d3 sur lequel je mets des données? Est-ce que cela a quelque chose à voir avec svg ou dom? Je suis juste confus pourquoi je suis selectAll et appelant des données sur la sélection.

<!DOCTYPE html> 
<meta charset="utf-8"> 
<body> 
<style> 
</style> 

<script src="http://d3js.org/d3.v3.js"></script> 
<script> 


(function() { 

var svg = d3.select('body').append('svg').attr('width', 900); 

var circle = svg.selectAll("circle") 
    .data([32, 57, 293]); 

circle.enter() 
.append("g") 
.call(function(gs) { 
    gs.append("rect").attr("width", 20).attr("height", 20).attr("x", String); 
    gs.append("circle").attr("cy", 90).attr("cx", String).attr("r", Math.sqrt); 
}) 
.attr('class', 'test'); 
circle.exit().remove() 

})(); 

</script> 
</body> 

Répondre

0

circle détient actuellement trois SVGGElements, ou "g" s, dont chacun est titulaire d'un cercle et un rectangle qui étaient .append -El dans votre exemple.

De l'MDN:

L'élément de g est un récipient utilisé pour les objets de groupe. Les transformations appliquées à l'élément g sont effectuées sur tous ses éléments enfants. Les attributs appliqués sont hérités par les éléments enfants. En outre, il peut être utilisé pour définir des objets complexes qui peuvent être référencés ultérieurement avec l'élément.

selectAll("some-container") retournera un élément correspondant à ce nom ou en créera un nouveau et le retournera. Voir https://github.com/mbostock/d3/wiki/Selections#wiki-d3_selectAll

Essayez d'ajouter ces derniers sur la ligne 27 pour voir les valeurs x de vos cercles:

alert("x1: " + d3.select(circle.selectAll("circle")[0][0]).attr("cx")); 
alert("x2: " + d3.select(circle.selectAll("circle")[1][0]).attr("cx")); 
alert("x3: " + d3.select(circle.selectAll("circle")[2][0]).attr("cx"));