我有一個像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