【发布时间】:2015-06-17 04:48:48
【问题描述】:
我需要使我的 D3 创建的 SVG 图表可下载。我找到了this question 的一个答案,它建议将 SVG 的 XML 编码为 base64,但后来我发现 this post 说纯文本也应该没问题,所以我想出了这样的东西:
<!DOCTYPE html>
<html>
<head>
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<script>
var data = [22, 33, 11, 55, 44];
var svg = d3.select('body').append('svg')
.attr('id', 'chart')
.attr('version', '1.1')
.attr('xmlns', 'http://www.w3.org/2000/svg')
.attr('width', 600)
.attr('height', 400)
.style('background-color', 'powderblue')
.selectAll('circle')
.data(data)
.enter().append('circle')
.attr('cx', function(d) { return 8*d; })
.attr('cy', function(d) { return 4*d; })
.attr('r', function(d) { return d; })
.style('fill', function(d) { return d3.rgb(2*d, 4*d, 3*d); })
;
d3.select('body').append('a')
.attr('href-lang', 'image/svg+xml')
.attr('href', 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg">' + unescape(svg.node().parentNode.innerHTML) + '</svg>')
.text('Download')
;
</script>
</body>
</html>
上面的代码部分工作,因为下载链接可以在浏览器中打开或下载到文件中,但在每种情况下,只有圆圈是可见的,而其他所有(即宽度、高度、bg 颜色)都丢失了,所以 SVG 只能在原始 HTML 页面中正确显示。 获取使用 D3 创建的 SVG 的完整代码的正确方法是什么?我尝试了 svg.html() 和 d3.select(svg).html(),但它返回 null。
【问题讨论】:
标签: javascript svg d3.js