Sto giocando con lo drag multiples example e ho notato qualcosa che non so spiegare.Perché d3's select() e selectAll() si comportano diversamente qui?
In questo frammento:
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);
ho cambiato selectAll
-select
. Funziona ancora, ma ora gli elementi svg
vengono aggiunti dopo il il tag </body>
. Il codice originale, con selectAll
, li aggiunge dopo il tag <body>
come ci si aspetterebbe.
Poiché l'html originale contiene alcuna hardcoded <svg>
elemento, penserei che sia select
e selectAll
solo restituisce la selezione vuota. Quindi non riesco a capire perché hanno un comportamento diverso.
Sto solo cercando una spiegazione. Grazie! Il post di
Beh, non ha senso per selezionare * una * elemento se si vuole realmente a che fare con quelli multipli. Quindi penso che l'uso di '.select' +' .data' non dovrebbe essere comunque un caso d'uso valido. '.select' sembra creare una selezione con' parentNode' essendo '' (il nodo radice HTML) e '.selectAll' una selezione con'
'(dopo' .select ('body') '). Aggiungere gli elementi a 'html' non sembra essere il comportamento previsto, ma potrebbe essere intenzionale. Chiederei all'autore, potrebbe anche essere un bug. –re: il tuo punto sulla validità del caso d'uso di select, la mia comprensione è stata che sia select che selectAll restituiscono un oggetto selection, che è una sorta di collezione. succede solo che la collezione restituita da select abbia un singolo elemento (o sia vuota). quindi l'applicazione di data() è valida in entrambi i casi. per favore correggimi se quella comprensione è sbagliata – Jonah
. selezionare dovrebbe solo afferrare il primo elemento che corrisponde all'identificatore, non dovrebbe accodare diversamente da selectAll. Lo posterei come un bug su Github. – Elijah