私は最終的に D3 を学習する過程にあり、答えを見つけることができなかった問題に出くわしました。私の質問がライブラリについて慣用的に考えていないためなのか、それとも現在認識していない手順によるものなのかはわかりません。また、私は 6 月に Web 関連のことを始めたばかりなので、javascript についてはかなりの初心者です。
食品のリストとそれぞれの画像をユーザーに提供するツールを作成しているとします。また、別のビューにリンクできるように、各リスト項目に一意の ID でラベルを付ける必要があるという追加の制約を追加しましょう。これを解決するための私の最初の直感は、<div>
それぞれ独自の ID を持つ のリストを作成することです。ここで、それぞれdiv
に独自の<p>
とがあり<img>
ます。結果の HTML は次のようになります。
<div id="chocolate">
<p>Chocolate Cookie</p>
<img src="chocolate.jpg" />
</div>
<div id="sugar">
<p>Sugar Cookie</p>
<img src="sugar.jpg" />
</div>
このツールのデータは JSON 配列にあり、個々の JSON は次のようになります。
{ "label": "sugar", "text": "Sugar Cookie", "img": "sugar.jpg" }
HTML を一気に生成する方法はありますか? div を追加する基本ケースから始めると、コードは次のようになります。
d3.select(containerId).selectAll('div')
.data(food)
.enter().append('div')
.attr('id', function(d) { return d.label; });
<div>
では、 aを含む a を追加するとどう<p>
なるでしょうか。私の当初の考えは、次のようなことをすることでした:
d3.select(containerId).selectAll('div')
.data(food)
.enter().append('div')
.attr('id', function(d) { return d.label; })
.append('p').text('somethingHere');
しかし、これには 2 つの問題があります。(1)div
要素からデータを取得する方法と、(2) 1 つの宣言チェーンで複数の子を同じ親に追加するにはどうすればよいですか? に追加する 3 番目のステップを作成する方法が思いつきませんimg
。
http://bost.ocks.org/mike/nest/を指す別の投稿で、ネストされた選択についての言及を見つけました。しかし、ネストされた選択であり、したがって追加を 3 つのチャンクに分割することは、この状況に適切/慣用的ですか? それとも、宣言の 1 つのチェーンでこの構造を形成する適切に構成された方法が実際にありますか? https://github.com/mbostock/d3/wiki/Selectionsで言及されているサブセレクションを使用する方法があるようですが、その仮説をテストするのに十分な言語に精通していません。
概念レベルから見ると、これら 3 つのオブジェクト ( div
、p
、およびimg
) は、個別のエンティティではなく 1 つのグループのように扱われます。コードにもそれが反映されているとよいでしょう。