【发布时间】:2013-03-01 00:42:52
【问题描述】:
我正在为 SVG 中的 foreignObject 苦苦挣扎。我想在rect 中添加文本,并选择使用 HTML 来自动换行。 foreignObject的描述可以在here找到。
我正在使用 D3,这是我的数据:
var cds = [
{"uid":"U12","sid":"16","statement":"Movies","x":10,"y":10},
{"uid":"U20","sid":"17","statement":"Food","x":10,"y":170},
{"uid":"U22","sid":"15","statement":"Sport","x":10,"y":330}
];
我为每个数据添加一张卡片,并希望显示数据中的“语句”。
var cardsize = { width : 150, height : 150 };
var svg = d3.select("body").append("svg:svg")
.attr("width", 170)
.attr("height", 490);
var card = svg.selectAll("rect")
.data(cds)
.enter().append("svg:g")
.attr("class", "card")
.attr("transform", function(d,i) {
d.x = 10;
d.y = 10+i*(10+cardsize.height);
return "translate(" + d.x + "," + d.y + ")";
});
card.append("svg:rect")
.attr('width', cardsize.width)
.attr('height', cardsize.height)
card.append("svg:foreignObject")
.attr('width', cardsize.width)
.attr('height', cardsize.height)
.append('p')
.attr("class","statement")
.text(function(d) { return d.statement; });
一张卡片的输出是这样的:
<g class="card" transform="translate(10,330)">
<rect width="150" height="150"></rect>
<foreignObject width="150" height="150"><
p class="statement">Sport</p>
</foreignObject>
</g>
我在测试过的 (mac) 浏览器(Safari 6.0.2、Chrome 25.0.1364.99、Firefox 18.0.2)中看不到文本。 W3's validator 不喜欢这个输出,每张卡都给我这个错误:
在这种情况下,元素 foreignObject 不允许作为元素 g 的子级。
所以我的问题是,问题出在哪里,为什么foreignObject 不允许作为g 元素的子元素?
我也想知道为什么.html(function(d) { return d.statement; }); 不起作用(没有输出)。但是.text(function(d) { return d.statement; }); 工作正常吗?
这是fiddle。
【问题讨论】:
标签: javascript svg d3.js