selection.enter - 足りない要素を選択する
投稿日: / 更新日:
d3.jsのselection.enter()
は、関連付けたデータの数に対して、実際に存在する要素が足りなかった場合、その差分だけプレースホルダー状態(処理を適用できる状態)のオブジェクトを作成するメソッドです。「足りない分を補填する」というイメージで支障はないと思います。
サンプルコード
<ul></ul>
// ul要素を選択
d3.select( "ul" )
// ul要素の中の、li要素を選択状態にする (まだ存在しない)
.selectAll( "li" )
// 存在しないli要素にデータ(5個)を関連付ける
.data( [ "1個目のLI", "2個目のLI", "3個目のLI", "4個目のLI", "5個目のLI" ] )
// 存在しないli要素を選択しているd3.selectionオブジェクトに対して[enter()]を実行する
.enter()
// ul要素に補填された分のli要素を追加する
.append( "li" )
// 補填された分のli要素のテキストを変更する
.text( function( d, i ) { return d ; } ) ;
デモ
仕組み
enter()
は、「足りない分だけ補填してくれる働きをする」と理解しておけば、大きく間違わないと思います。d3.jsのselect()
、またはselectAll()
は、getElementById()
のように「取得する」のではなく、「選択する」と表現した方がしっくりきます。まだ存在していない要素も、あらかじめ選択状態にできます。説明は、メソッドチェーンで前後のコードと繋がっているので、ご注意下さい。
<ul></ul>
// ul要素の中の全てのli要素を選択 (まだ存在しない)
d3.select( "ul" ).selectAll( "li" ) ;
enter()
は、data()
とセットで利用する関数です。まだ存在していないli
要素を選択したら、今度はdata()
を使って、配列を関連付けします。ここで指定した値の数だけ、最終的にli
要素が存在することになると覚えておきましょう。ちょっと回りくどい表現ですが、5個の値を関連付けたら最終的に5個、10個の値を関連付けたら最終的に10個のli
要素が存在することになります。
// データを関連付けする (5個の値だから、最終的に5個のli要素が存在することになる)
.data( [ "1個目のLI", "2個目のLI", "3個目のLI", "4個目のLI", "5個目のLI" ] ) ;
さて、ここでenter()
の登場です。data()
で関連付けした後、enter()
を実行して下さい。ここで、例えば、あらかじめli
要素が2個あった場合は3個、4個あった場合は1個…、というように、足りない分だけ、li
要素が補填されます。足りない分の要素を含むプレースホルダー状態のオブジェクトを作成します。
// 足りない分を補填する
.enter() ;
enter()
の後は、enter()
で補填された分だけが処理の対象となります。元からあるli
要素には、ここからの処理は適用されません。それでは、append()
で補填した分のli
要素を、ul
要素に追加した後、text()
で要素内にテキストを加えましょう。
// 補填した分、追加する
.append( "li" )
// 補填した分のテキストの内容を変更する
.text( function( d, i ) { return d ; } ) ;
構文
selection = selection.enter()
項目 | 説明 |
---|---|
selection | 補填された要素の部分のデータを含む、プレースホルダー状態のd3.selectionオブジェクトが戻り値となる。 |