我有一个像d3.js:使用selection.on
[
{"name":"foo", "links":["a", "b", "c"]},
{"name":"bar", "links":["d", "e", "f"]}
]
的数据结构创建一个可扩展的列表即我想打表像
<ul>
<li> foo </li>
<li> bar </li>
</ul>
,当我点击在foo上,扩展像
<ul>
<li> foo
<ul>
<li> a </li>
<li> b </li>
<li> c </li>
</ul>
</li>
<li> bar </li>
</ul>
我想使用d3.js来做到这一点。它的方便和乐趣,使顶部的列表:
toplist = d3.select("body").append("ul");
toplist.selectAll("li")
.data(data)
.enter()
.append("li")
.text(function(d){return d.name;})
它甚至很容易添加子列表:
items = toplist.append("ul")
.selectAll("li")
.data(function(d){return d.links})
.enter()
.append("li")
.text(function(d){return d})
我可以一个on("click"..
添加到toplist
每个li
,像
toplist.selectAll("li")
.data(data)
.enter()
.append("li")
.text(function(d){return d.name;})
.on("click", expand)
并将子列表代码移入名为expand的函数。它看起来像
function expand(d,i){
,然后具有上述items = ...
代码在里面。
问题在于,这会同时扩大foo
和bar
。
如何给foo
列表元素一个单独的点击事件bar
只扩展该元素?本质上,我需要通过expand
数据元素的索引,并让它只对DOM的特定部分进行操作。
任何帮助,将不胜感激!
我应该补充说,如果我控制台。log d,i,this和d3.event在展开函数中只能看到我单击的元素 – 2011-12-30 20:23:43