【发布时间】:2018-04-24 10:23:36
【问题描述】:
假设我创建了一个像这样的简单图形:
<!doctype html>
<html lang="en">
<head>
<script src="https://d3js.org/d3.v5.min.js"></script>
</head>
<body>
<svg></svg>
<script>
const svg = d3.select('svg');
const g = svg.append('g');
g.append('g')
.selectAll('g')
.data([5, 10, 20, 40])
.enter()
.append('rect')
.attr('fill', 'green')
.attr('x', d => d)
.attr('y', d => d)
.attr('height', d => d)
.attr('width', d => d);
</script>
</body>
</html>
但是,我想创建一个分离的<g>,而不是仅仅附加到它,然后可以随意附加它(例如,它可以从函数返回)。
在 d3 V5 中,有一个 d3.create() 函数可以创建一个分离的元素。
<!doctype html>
<html lang="en">
<head>
<script src="https://d3js.org/d3.v5.min.js"></script>
</head>
<body>
<svg></svg>
<script>
const svg = d3.select('svg');
const g = svg.append('g');
const detachedG = d3.create('g');
detachedG.selectAll('g')
.data([5, 10, 20, 40])
.enter()
.append('rect')
.attr('fill', 'green')
.attr('x', d => d)
.attr('y', d => d)
.attr('height', d => d)
.attr('width', d => d);
g.append(() => detachedG.node());
</script>
</body>
</html>
但它不会出现在浏览器中,即使 DOM 看起来一样。
任何想法如何解决这个问题?
【问题讨论】:
标签: javascript d3.js svg