2013-10-10 79 views
2

我有樹結構的JSON。我呈現這樣的:如何使用d3動態更新嵌套列表?

var lis = d3.select("#active ul") 
    .selectAll("li") 
    .data(getTopLevelChildren(), nodeId); 
lis.enter().append("li").each(makeNodeView); 

makeNodeView遞歸做同樣的事情,它創建DOM中的ul/li樹。

但是,我也想動態更新列表。這種直接的代碼不起作用:

lis.each(updateNodeView); 
lis.exit().remove(); 

的問題是,selectAll("li")選擇了所有li節點遞歸。所以lis.exit().remove()刪除頁面上任何地方的所有li標籤,除了那些在樹根上的標籤。

如何一次只選擇樹的一級?

+0

一個簡單的方法是將一個類添加到所有指定其級別的「li」元素(例如'level1'等)並根據該元素進行選擇。 –

回答

1
var ul = d3.select(this).append("ul"); 
var lis = ul.selectAll(function() { return ul[0][0].childNodes })