を使用して展開し、リストを作成するすなわち、私はd3.js:selection.on
私はをクリックし、<ul>
<li> foo </li>
<li> bar </li>
</ul>
のようなリストを作成したいと思い
[
{"name":"foo", "links":["a", "b", "c"]},
{"name":"bar", "links":["d", "e", "f"]}
]
のようなデータ構造を持っていますon fooは、次のように展開します
<ul>
<li> foo
<ul>
<li> a </li>
<li> b </li>
<li> c </li>
</ul>
</li>
<li> bar </li>
</ul>
私はこれをd3.jsを使用して行いたいとします。
items = toplist.append("ul")
.selectAll("li")
.data(function(d){return d.links})
.enter()
.append("li")
.text(function(d){return d})
私は
toplist.selectAll("li")
.data(data)
.enter()
.append("li")
.text(function(d){return d.name;})
.on("click", expand)
のように、
toplist
の各
li
に
on("click"..
を追加することができます。
toplist = d3.select("body").append("ul");
toplist.selectAll("li")
.data(data)
.enter()
.append("li")
.text(function(d){return d.name;})
それはサブリストを追加することさえ簡単です:それは、上のリストを作るのは簡単で楽しいです
を呼び出し、サブリストコードをexpandという関数に移動します。それは
function expand(d,i){
のように見えますし、それに上記items = ...
コードを持っています。
これは、foo
とbar
の両方を同時に展開するという問題があります。
foo
リスト要素にクリックイベントを別々にしてbar
という要素を展開するにはどうすればよいですか?基本的には、私はexpand
のデータ要素のインデックスを渡す必要があり、DOMのその特定の部分に対してのみ動作させる必要があります。
助けていただけたら幸いです!
私はコンソールを追加する必要があります。log d、i、thisとd3.eventの展開関数です。クリックした要素のみが表示されます –