Der Hauptunterschied mit der Gruppierung ist, dass das zweite Argument zu Ihrer Funktion (i) der in-Gruppenindex statt dem within-Auswahlindex.
Erinnern Sie sich an den Index, der an irgendwelche Attribute attr, style usw. in d3 übergeben wurde?
...
.attr('something', function(d, index) {
// major gymnastics with d and index
}
Also, wenn Sie einen selectAll tun, beginnt der Index von 0 für jede Gruppe.
Also, wenn Sie zwei gekettet selectAlls tun, wo die ersten (Gruppe) -Spiegel sind Zeilen (tr) und die zweite (Kind) -Spiegel sind Zellen (td), würde haben Sie die folgenden als Indizes übergeben für
0, 1, 2, 0, 1, 2
statt
0, 1, 3, 4, 5, 6
2 Reihen x 3 Tabellenzellen, die ist, was man erwarten würde, wenn man nur 6 Knoten mit einem einzigen selectAll wählen.
Der folgende Code-Snippet veranschaulicht dies
d3.selectAll("#a tr").selectAll("td").text(function(d, index) {
return index;
})
d3.selectAll("#b td").text(function(d, index) {
return index;
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
Grouped cells (i.e. 2 selectAll)
<table id="a">
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
Ungrouped cells (i.e. 1 selectAll)
<table id="b">
<tr>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
</tr>
</table>
Die erste Animation auf der Seite, die Sie (http://bost.ocks.org/mike/selection/) verknüpfen diese ziemlich gut illustriert - hier ist ein deutlicher up Version desselben
Es kann noch klarer sein, dies im Zusammenhang mit [verschachtelte Auswahl] (http://bost.ocks.org/mike/nest/) zu berücksichtigen. Ich denke, das macht es ziemlich intuitiv, warum dies auf diese Weise implementiert wird und der Index nicht innerhalb der Auswahl liegt. –
@LarsKotthoff - du hast Recht. Das erklärt, warum Sie es brauchen, zusätzlich zu dem, was es bedeutet + es hat bessere Diagramme, die mein MSPaint Versuch :-) – potatopeelings
@LarsKotthoff: das half sehr viel beim Verständnis des "Warum" -Teils. –