use*_*072 5 javascript css safari svg d3.js
我将d3与svg:foreignObject一起使用,以创建一个格式化的文本框,该文本框显示在悬停数据点旁边。以下策略在Chrome浏览器中可以很好地运行,但是foreignObject在Safari中不可见。Safari检查器在DOM中,正确的位置以及所有正确的数据中显示foreignObject。我只是看不到!我想念什么?
我的代码如下所示:
var description = svg.append('foreignObject')
.attr('class', 'description')
.attr('id', 'desc')
.attr('x', x)
.attr('y', y)
.attr('width', width);
var descdiv = description.append('xhtml:div')
.append('div')
.attr('id', 'textBox');
descdiv.append('p')
.attr('class', 'text1')
.attr('dy', '1em')
.html('First line');
descdiv.append('p')
.attr('class', 'text2')
.attr('dy', '2em')
.html('<tspan class="text3">' + 'Second line 1st part + '</tspan><tspan class="text4">' + ', ' + 'Second line 2nd part' + '</tspan>');
descdiv.append('p')
.attr('class', 'text1')
.attr('dy', '3em')
.html('Third line');
Run Code Online (Sandbox Code Playgroud)
编辑
原来的问题是,foreignObject需要一个height属性才能在Safari中显示(有趣的是,不在Chrome中显示)。我可以在上面之后设置高度,如下所示:
d3.select('#desc').attr('height', height);
Run Code Online (Sandbox Code Playgroud)
但是现在的问题是获取没有高度属性的文本框的高度(因为高度需要随文本的长度而变化)。我认为类似getComputedTextLength的方法可能会起作用,但是我不太清楚。任何建议,不胜感激。
小智 1
您应该将 height 和 width 属性设置为 foriegnObject。
var description = svg.append('foreignObject')
.attr('class', 'description')
.attr('id', 'desc')
.attr('x', x)
.attr('y', y)
.attr('width', width)
.attr('height', xxx);
Run Code Online (Sandbox Code Playgroud)