我希望将html附加到D3中的矩形上,以便为我提供多行工具提示。底部是我如何添加一个矩形,这可能是问题的一部分。顶部是应该在我的世界中运行的代码。
newRect.().html(" <textArea font-family=Verdana font-size=20 fill=blue > Test " + "</br>" + "Test2 </textArea>");
将文本字段插入SVG,它只是不显示:
的 HTML :
<rect id="rectLabel" x="490" y="674" width="130" height="160" fill="red">
<textarea fill="blue" font-size="20" font-family="Verdana"> Test </br>Test2 </textarea>
</rect>
我有一个鼠标悬停功能,运行如下:
newRect = svg.append("rect")
.attr("x", xCor)
.attr("y", yCor)
.attr("width", 130)
.attr("height", 160)
.attr("fill", "red")
.attr("id", "rectLabel");
我想我应该这样做,但它不起作用。它只是删除了我想要附加的g.node。
newRect = $(this).enter().append("rect")
.attr("x", xCor)
.attr("y", yCor)
.attr("width", 130)
.attr("height", 160)
.attr("fill", "red")
.attr("id", "rectLabel");
问题: 为什么我的文字没出现?我试过.html,.textArea。我想要一个多行标签,所以我不认为.text会正常工作吗?另外,我该如何追加矩形?
答案 0 :(得分:112)
rect
不能包含text
元素。而是使用文本和矩形的位置转换g
元素,然后将矩形和文本追加到它:
var bar = chart.selectAll("g")
.data(data)
.enter().append("g")
.attr("transform", function(d, i) { return "translate(0," + i * barHeight + ")"; });
bar.append("rect")
.attr("width", x)
.attr("height", barHeight - 1);
bar.append("text")
.attr("x", function(d) { return x(d) - 3; })
.attr("y", barHeight / 2)
.attr("dy", ".35em")
.text(function(d) { return d; });
http://bl.ocks.org/mbostock/7341714
多行标签也有点棘手,你可能想查看这个wrap function。
答案 1 :(得分:7)
您是否尝试过SVG text元素?
.append("text").text(function(d, i) { return d[whichevernode];})
rect元素不允许 text 元素在其中。它只允许描述性元素(<desc>, <metadata>, <title>
)和动画元素(<animate>, <animatecolor>, <animatemotion>, <animatetransform>, <mpath>, <set>
)
将文本元素附加为兄弟,并进行定位。
<强>更新强>
使用 g 分组,这样的事情怎么样? fiddle
你当然可以将逻辑移动到你可以附加到的CSS类中,从组中删除(this.parentNode)