我正在使用 d3.js 构建一个涉及数据、形状和文本的小项目。根据数据,文本出现在形状内部。如果您将鼠标悬停在形状上,形状应该会变大并显示更多文本。
文本以下列方式添加,并且工作正常:
Shapes
.append("foreignObject")
[...]
.append("xhtml:body")
.style("font", "14px 'Helvetica Neue'")
.html(function(d) {return d.text; });
我使用foreignObject而不是文本,因为我需要将文本换行,这是迄今为止我能够实现这种效果的唯一方法。
让我悲伤的是鼠标悬停。我可以很好地重新调整形状的大小,但我无法在文本上调用过渡。事实上,我真的不知道如何成功访问它。
以下是鼠标悬停事件中的一些代码:
d3.select(this)
.transition()
.duration(250)
.attr("height", function(d,i) {
d.showAll()
//d.textObject.width = 4;
return d.height;
} );
d3.select(this).select("foreignObject").transition()
.duration(250)
.select("xhtml:body")
.html(function(d) {return d.text; });
这个想法是 showAll() 函数已经将文本更改为新值,但是代码并没有那么远。Chrome 给我的消息是“Uncaught TypeError: Object [object Array] has no method 'html'”。
那么,如何访问文本并对其进行更新,以便我的转换将导致新文本可见而旧文本消失?
一段时间以来,我一直在努力反对这一点,因此非常感谢任何帮助。