gpt4 book ai didi

javascript - 将多个文本元素添加到 svg 元素时出现问题

转载 作者:行者123 更新时间:2023-12-01 03:37:05 25 4
gpt4 key购买 nike

使用基于 D3 的 code对于平行坐标,我尝试添加一些文本:

  g_data.select(".label")
.text(dimensionLabels) //visible
g_data.select(".sublabel1")
.text(dimensionSublabels1) //not visible
g_data.select(".sublabel2")
.text(dimensionSublabels2) //not visible

到之前创建的 svg:text 和 svg:tspan 元素:

var g_data = pc.svg.selectAll(".dimension").data(pc.getOrderedDimensionKeys());
// Enter
g_data.enter()
.append("svg:g")
.attr("class", "dimension")
.attr("transform", function(p) { return "translate(" + position(p) + ")"; })
.style("opacity", 0)
.append("svg:g")
.attr("class", "axis")
.attr("transform", "translate(0,0)")
.each(function(d) {
var axisElement = d3.select(this).call( pc.applyAxisConfig(axis, __.dimensions[d]) );

axisElement.selectAll("path")
.style("fill", "none")
.style("stroke", "#222")
.style("shape-rendering", "crispEdges");

axisElement.selectAll("line")
.style("fill", "none")
.style("stroke", "#222")
.style("shape-rendering", "crispEdges");
})


.append('svg:text') //1st part of label
.attr({
"text-anchor": "middle",
"y": -40,
"x": 0,
"dy": 0,
"class": "label"
})
.append('svg:tspan') //2nd part of label
.attr({
"x": 0,
"dy": 17,
"class": "sublabel1"
})
.append('svg:tspan') //3rd part of label
.attr({
"x": 0,
"dy": 14,
"class": "sublabel2"
})

问题是,这仅部分有效,原因我无法解释:一次只能显示一个文本标签。

更具体地说,对于上面的情况,文本只会添加到“.label”类 svg 中,其他两个是不可见的。但是如果我注释掉前两行(如下所示),则 sublabel1 变得可见,依此类推。

  //g_data.select(".label")
// .text(dimensionLabels) //with this part commented, the next label becomes visible
g_data.select(".sublabel1")
.text(dimensionSublabels1) //visible
g_data.select(".sublabel2")
.text(dimensionSublabels2) //not visible

任何人都可以帮助找出可能导致此问题的原因,以及我可以做些什么来同时显示所有标签吗?非常感谢!

最佳答案

在链接调用append时要小心。 append 返回附加元素,因此链接 appends 将创建一个嵌套结构。

<text class="label">
<tspan class="sublabel1">
<tspan class="sublabel2"></tspan>
</tspan>
</text>

需要注意的是,设置 text 元素的文本将删除其中的任何 tspans,大概是因为 tspans 算作文本。

你想要这样的东西

<text>
<tspan class="label"></tspan>
<tspan class="sublabel1"></tspan>
<tspan class="sublabel2"></tspan>
</text>

因此,创建一个 text 节点,将其保存到变量中,然后将 tspans 附加到该变量。

示例:https://jsfiddle.net/guanzo/b2q2nm54/1/

关于javascript - 将多个文本元素添加到 svg 元素时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44186295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com