2017-01-11 14 views
1

これら2つのアプローチの長所と短所は何ですか?バーがどのように飛んでいくかを制御するもの。上から下、または左から右へ?なぜbar.exit()。remove()はオプション2で動作しないのですか?あなたがここに二つの実質的に異なるアプローチを持ってこれらのアプローチの長所と短所は何ですか?

オプション1 https://jsfiddle.net/2523onr3/ オプション2 https://jsfiddle.net/sjp700/2523onr3/3/

bar.exit().remove() 

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

答えて

1

最初のオプション:

bar.exit().remove() 

が適切な "出口" の選択です。これは、それが何をするかである:あなたの更新の選択を考えると

...

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

...あなたの出口の選択は、選択されたDOM要素とデータを比較します。データよりも多くの要素がある場合、余分な要素(つまり、データなしで残された要素)がこの選択項目を設定します。次に、remove()を実行すると、この選択項目に含まれる要素が削除されます。

remove()を行う前に、あなたがあなたの出口の選択をしたい任意の遷移を行うことができます移動し、右、左、上、変更、不透明度を色を変えるなどだから、あなただけではなく、「バーが飛ぶ道」制御出口の選択ではなく、入力と更新の選択でも同様です。

一方、2番目のオプション...

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

...単にそれは、(それは、円、テキスト、四角形、五角形することができbarという名前のクラスですべてを選択重要ではない...)、そのクラスのすべての要素を削除します。

+0

PS:データ配列には常に6つのオブジェクトがあるため、あなたのケースではexitの選択に大きな違いはありません。 –

+0

bar.exit()。remove()がオプション2で動作しない理由はまだ分かりません。両方のオプションにbar = svg.selectAll( "。bar")。data(dataset)が含まれています。フィルタ関数(d){return d.label;差をつける?両方のケースで6つのオブジェクトがあると指摘したように、値は変更されますがラベルは変更されません。 – user3359706

+0

出口選択は、データバインディング選択の後に来なければなりません。そして、私が言ったように、出口の選択は常に空です。また、アプローチの論理を扱う一般的で理論的な答えを提供していることを念頭に置いてください...あなたの質問(「なぜこれが機能しなかったのか」)は、望ましい結果のより良い説明を必要とします変更しない?)。 –

関連する問題