la differenza principale con il raggruppamento è che il secondo -h'allo funzione (i) è l'indice entro i gruppi anziché dell'indice entro selezione.
Ricordare che l'indice è passato a tutte le funzioni attr, style, ecc in d3?
...
.attr('something', function(d, index) {
// major gymnastics with d and index
}
Quindi, quando si fa un selectAll, l'indice parte da 0 per ogni gruppo.
Quindi, se si fa due selectAlls incatenati dove i primi livelli (gruppo) sono le righe (TR) e il secondo livello (bambino) sono cellule (TD), che ci si hanno le seguenti passato come indici per un tavolo 2 righe x 3 celle
0, 1, 2, 0, 1, 2
invece di
0, 1, 3, 4, 5, 6
che è quello che ci si aspetta quando si seleziona solo 6 nodi con un unico selectAll .
Il seguente frammento di codice illustra questo
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>
La prima animazione sulla pagina si è collegato al (http://bost.ocks.org/mike/selection/) illustra questo abbastanza bene - ecco una marcata versione dello stesso
Potrebbe essere ancora più chiaro considerarlo nel contesto di [selezioni nidificate] (http://bost.ocks.org/mike/nest/). Penso che ciò renda abbastanza intuitivo il motivo per cui questo viene implementato in questo modo e l'indice non è nella selezione. –
@ LarsKotthoff - hai ragione. Questo spiega "perché ne hai bisogno" oltre a ciò che significa + ha diagrammi migliori che il mio tentativo di MSPaint :-) – potatopeelings
@LarsKotthoff: questo ha aiutato molto a capire la parte "perché". –