使用 D3 将分层 JSON 转换为 HTML
Transforming hierarchical JSON to HTML using D3
我正在尝试使用递归函数使用D3可视化分层JSON。这是JSFiddle– http://jsfiddle.net/nBVcs/,这是代码的相关部分:
function addNode(selection) {
var nodeGroup = selection.selectAll('.child')
.data(function(d) { return d.children })
nodeGroup
.enter()
.append('div')
.attr("class", "child")
nodeGroup
.exit()
.remove()
nodeGroup
.style("padding-left", "2em")
nodeGroup.append("text")
.text(function(d) { return d.name });
nodeGroup.each(function(d) {
if (d.children) {
nodeGroup.call(addNode)
};
});
}
到目前为止,这种方法存在几个问题。首先是叶节点呈现两次。
此方法的另一个问题是,添加更深的叶节点将导致错误,因为 D3 将尝试将不存在的数组 (d.children) 绑定到所选内容。
如果您能指出我正确的方向,我将很高兴。
您的递归调用不正确,这将起作用:
nodeGroup.each(function(d) {
if (d.children) {
d3.select(this).call(addNode);
};
});
我也更新了你的小提琴。
我做了另一个小修改:<text>
节点应该附加到.enter()
组,否则当你更新树时,它将被复制。(仅当您计划不仅使用此代码创建树,还用于更新树时,这才有意义)有关详细信息,请参阅常规更新模式。
相关文章:
- Html画布自由转换
- 强制转换 HTML 对象元素
- js/jquery/other library插件来转换HTML->XML
- 如何转换 HTML DOM 结构
- 如何在javascript中正确转换html
- 转换HTML画布内容,在laravel后端向其发送角度形式的数据请求
- 使用JavaScript(RegExp)转换HTML实体
- 函数无法转换html
- wkhtmltopdf转换html到pdf得到JavaScript执行超时异常
- 转换html页面表示为文本到dom对象
- 使用客户端JavaScript来转换HTML页面而不是从服务器发送多个HTML页面是明智的吗?
- 需要转换HTML表格在CSS与提交表单
- 转换HTML 5画布图纸格式可读的3D打印机
- 任何javascript内置函数转换HTML实体从url传递
- 如何在文档中转换HTML元素
- 转换HTML文本框完全只读
- 垂直分页转换:HTML, CSS, Javascript
- Meteor:我如何转换HTML/HTML5代码来使用Meteor
- 用于转换 HTML 代码的模板
- 点击按钮转换html页面图像和下载使用JS,Jquery