Pourquoi sont-d3 (select) et selectAll() de se comporter différemment?

Je joue avec le faites glisser les multiples exemple, et j'ai remarqué quelque chose que je ne peux pas l'expliquer.

Dans cet extrait de code:

var svg = d3.select("body").selectAll("svg")
    .data(d3.range(16).map(function() { return {x: width / 2, y: height / 2}; }))
    .enter().append("svg")
    .attr("width", width)
    .attr("height", height);

J'ai changé selectAll à select. Il fonctionne toujours, mais maintenant, le svg éléments sont ajoutés après la </body> tag. Le code d'origine, avec selectAll, les ajoute après la <body> balise que vous attendez.

Depuis le html d'origine ne contient pas codé en dur <svg> élément, je pense que les deux select et selectAll il suffit de retourner le vide de sélection. Donc je ne peux pas comprendre pourquoi ils entraîner des comportements différents.

Je suis à la recherche d'une explication. Merci!

  • Eh bien, il ne fait pas de sens pour sélectionner un élément, si vous voulez traiter avec plusieurs. Donc, je pense que l'utilisation d' .select + .data ne devrait pas être un cas d'utilisation, de toute façon. .select semble créer une sélection avec parentNode être <html> (le HTML nœud racine) et .selectAll une sélection avec <body> (après .select('body')). En ajoutant les éléments de html ne semble pas être le comportement attendu, mais il pourrait être intentionnelle. Je vais demander à l'auteur, il pourrait être un bug aussi.
  • re: votre point de vue sur la validité de l'utilisation de sélectionner, ma compréhension était que les deux de sélectionner et de selectAll retour une sélection de l'objet, qui est une sorte de collection. il se trouve que la collection retournée par sélectionner arrive à avoir un seul élément (ou est vide). ainsi, à l'application des données() est valide dans les deux cas. veuillez me corriger si cette interprétation est erronée
  • .sélectionnez doit il suffit de prendre le premier élément qui correspond à l'identifiant, il ne faut pas ajouter différemment selectAll. J'avais poster comme un bug sur Github.
InformationsquelleAutor Jonah | 2013-01-06