ci nessun è costruito in modo per farlo, ma si può raggiungere in tutti i modi, tra cui
Ambito:
var data = ['a','b','c','d']
d3.select('.parent').selectAll('.child')
.data(data)
.enter()
.append('div')
.attr('class', 'child')
.text(function(d,i) {
return "previous letter is " + data[i-1];
});
Linking (funziona anche se sono stringhe, come in questo esempio):
var data = ['a','b','c','d']
for(var i = 0; i < data.length; i++) { data[i].previous = data[i-1]; }
d3.select('.parent').selectAll('.child')
.data(data)
...
.text(function(d,i) {
return "previous letter is " + d.previous
});
Via il nodo padre (Sperimentale):
var data = ['a','b','c','d']
d3.select('.parent').selectAll('.child')
.data(data)
...
.text(function(d,i) {
var parentData = d3.select(this.parentNode).selectAll('.child').data();
// NOTE: parentData === data is false, but parentData still deep equals data
return "previous letter is " + parentData[i-1];
});
Relativo all'ultimo esempio, è possibile provare a trovare il nodo DOM di pari livello immediatamente precedente a questo nodo. Qualcosa di simile
...
.text(function(d,i) {
var previousChild = d3.select(this.parentNode).select('.child:nth-child(' + i + ')')
return "previous letter is " + previousChild.datum();
})
ma gli ultimi due può fallire in tutti i modi, come se i nodi del DOM non sono ordinati lo stesso data
, o se ci sono altri nodi estranei DOM all'interno del genitore.
La risposta riportata di seguito è piuttosto complessa. Hai provato a impostare d uguale a una variabile, eseguendo una richiamata su di essa, quindi aggiornando il valore della variabile con ogni incremento d? –