2017-01-11 2 views

Antwort

1

Sie haben hier zwei grundsätzlich verschiedene Ansätze.

Die erste Option:

bar.exit().remove() 

ist eine richtige "exit" Auswahl. Das ist, was es tut:

Ihre Update-Auswahl gegeben ...

var bar = svg.selectAll(".bar") 
    .data(dataset, function(d) { 
     return d.label; 
    }); 

... Ihre Exit-Auswahl der Daten mit den ausgewählten DOM-Elementen vergleicht. Wenn Sie mehr Elemente als Daten haben, füllen die zusätzlichen Elemente (dh die Elemente ohne Daten) diese Auswahl. Dann, wenn Sie remove() tun, entfernen Sie die Elemente, die in dieser Auswahl vorhanden sind.

Bevor remove() tun, können Sie einen beliebigen Übergang Sie mit Ihrem Ausgang Auswahl wollen tun: Auf dem Weg nach rechts, links, oben, Farbwechsel, Opazität zu ändern usw. So Sie Kontrolle „die Art und Weise die Balken fliegen“, nicht nur in der Exit-Auswahl, aber auch in der Eingabe- und Aktualisierungsauswahl.

Auf der anderen Seite, Ihre zweite Option ...

svg.selectAll(".bar").remove(); 

... wählt einfach alles mit einer Klasse mit dem Namen bar (es kann ein Kreis, ein Text, ein Rechteck, ein Fünfeck, es sein ist egal ...) und entferne alle Elemente mit dieser Klasse.

+0

PS: In Ihrem Fall macht die Auswahl der Ausgänge keinen großen Unterschied, weil Ihr Datenfeld immer 6 Objekte enthält. –

+0

Ich bin immer noch nicht klar, warum bar.exit(). Remove() nicht mit Option 2 arbeitet. Beide Optionen enthalten bar = svg.selectAll (". Bar"). Daten (Dataset). Funktioniert der Filter (d) {return d.label; den Unterschied machen? Wie Sie darauf hingewiesen haben, gibt es in beiden Fällen 6 Objekte, die Werte sind Änderungen, aber nicht die Beschriftungen. – user3359706

+0

Die Auswahl des Exits muss nach der Datenbindungsauswahl erfolgen. Und wie gesagt, Ihre Auswahl ist immer leer. Denken Sie auch daran, dass ich eine allgemeine, theoretische Antwort gegeben habe, die sich mit der Logik der Ansätze beschäftigt ... Ihre Frage ("Warum das nicht funktioniert hat") erfordert eine bessere Erklärung des gewünschten Ergebnisses (zum Beispiel welche Labels) nicht ändern?). –

Verwandte Themen