我正在尝试在 D3 中做一些简单的文本框,并在 SO 上使用另一个 q & a 我发现我需要使用 foreignObject 并将文本包装在一个 div 中。没关系。然后我想做的是通过单击其他内容来更新文本。我可以更新文本本身,但不能更新它的大小或颜色。这不可能。这是我的代码。
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
//add some text for clicking
svg.append("text")
.attr("x", "260")
.attr("y", "40")
.attr("font-family","sans-serif")
.attr("font-size", "18")
.attr("fill", "black")
.attr("id", "clickone")
.text("Click this")
;
//this is the foreignObject with the original text
svg.append('foreignObject')
.attr('x', 40)
.attr('y', 100)
.attr('width', 180)
.attr('height', 100)
.append("xhtml:body")
.attr("id","words")
.html('<div style="width: 160px;"><p>Old text old text old text old text old text old text<p></div>');
//and here's the click and transition
svg.select("svg #clickone")
.on("click", function() {
svg.select('p')
.transition()
.delay(500)
.text("new text new text new text new text new text")
.attr("fill","red")
.attr("font-size","20")
})
;
所以在那个例子中,文本更新,过渡延迟,但颜色和大小没有改变。没有 CSS 或任何东西,只有代码。我究竟做错了什么?