D3.js 生成有效的 SVG 但不显示任何内容
D3.js produces valid SVG but shows nothing
这是我的 D3.js 脚本:
var svg = d3.select('body').append('svg')
.attr('width', 100)
.attr('height', 100);
svg.append(function () {
var g = d3.select(document.createElement('g'))
.attr('width', 50)
.attr('height', 50);
g.append('circle').attr('r', 8).attr('cx', 10).attr('cy', 10);
g.append('text').text("test").attr('x', 25).attr('y', 25);
return g.node();
});
你可以在jsfiddle. The script produces valid SVG code上查看:
<svg width="100" height="100"><g width="50" height="50"><circle r="8" cx="10" cy="10"></circle><text x="25" y="25">test</text></g></svg>
您可以使用 DOM 检查器来验证这确实是使用上面的 JavaScript 生成的代码。问题是你什么都看不到。图像根本不会出现。但是如果你手动将生成的 SVG 代码复制到另一个 JSFiddle 实例中,你可以清楚地看到图像在那里并且有效。
我想问题出在 append
函数中,事实上我传递的是一个函数作为参数而不是元素名称。但是,根据文档,这是一项受支持的功能。这真的很奇怪,因为显然 DOM 已正确更改。
您需要使用 createElementNS
而不是 createElement
,并提供正确的命名空间——否则您只会创建恰好具有 “正确”名称的元素,但未被浏览器识别为 SVG 元素。
var g = d3.select(document.createElementNS('http://www.w3.org/2000/svg', 'g'))
这是我的 D3.js 脚本:
var svg = d3.select('body').append('svg')
.attr('width', 100)
.attr('height', 100);
svg.append(function () {
var g = d3.select(document.createElement('g'))
.attr('width', 50)
.attr('height', 50);
g.append('circle').attr('r', 8).attr('cx', 10).attr('cy', 10);
g.append('text').text("test").attr('x', 25).attr('y', 25);
return g.node();
});
你可以在jsfiddle. The script produces valid SVG code上查看:
<svg width="100" height="100"><g width="50" height="50"><circle r="8" cx="10" cy="10"></circle><text x="25" y="25">test</text></g></svg>
您可以使用 DOM 检查器来验证这确实是使用上面的 JavaScript 生成的代码。问题是你什么都看不到。图像根本不会出现。但是如果你手动将生成的 SVG 代码复制到另一个 JSFiddle 实例中,你可以清楚地看到图像在那里并且有效。
我想问题出在 append
函数中,事实上我传递的是一个函数作为参数而不是元素名称。但是,根据文档,这是一项受支持的功能。这真的很奇怪,因为显然 DOM 已正确更改。
您需要使用 createElementNS
而不是 createElement
,并提供正确的命名空间——否则您只会创建恰好具有 “正确”名称的元素,但未被浏览器识别为 SVG 元素。
var g = d3.select(document.createElementNS('http://www.w3.org/2000/svg', 'g'))