将文本拆分为一些粗体和一些不在功能Javascript片段上

splitting text for some bold and some not on functional javascript piece

本文关键字:功能 Javascript 片段 拆分 文本      更新时间:2023-09-26

我目前有以下代码

var temp = node.append("text")
.attr("dx", function(d) { return -8; })
.attr("dy", -4)
.style("text-anchor", function(d) { return d.root ? "start" : "end"; })
.style("font-size", function(d) { return d.selected ? "16px" : "10px"; })
.style("font-weight", function(d) { return d.selected ? "bold" : ""; })
.text(function(d) { return d.name; });

工作正常。 此代码接收一个字符串,但形式

streamname(module<-module<-module)
如果 json 节点包含 lastModuleSelected=true,我只希望最后一个模块为粗体,而不是整个

模块,如果 lastModuleSelected=false,我只希望流名称为粗体而不是整个内容。

我该怎么做呢? 当然,这在许多节点上运行,所以我不确定如何正确附加两个文本元素,因为字符串长度的大小各不相同......我仍然想要一个字符串,但其中一部分是粗体的,一部分是正常的。 有没有办法做到这一点?

注意:d.root,d.selected和 d.name 是收到的json中的属性,我还将添加一个d.lastModuleSelected属性。

如有必要,我确实可以选择分离流名称和模块列表,如果这样可以更轻松地编写 javascript。 即。而不是 d.name,我可能将d.streamname和d.moduleNameList作为两个单独的属性。

谢谢院长

感谢@Lars Kotthoff和他的评论,我能够像这样工作

  var text = node.append("text")
  .attr("dx", function(d) { return -8; })
  .attr("dy", -4)
  .style("text-anchor", function(d) { return d.root ? "start" : "end"; });
 text.append("tspan")
 .style("font-size", function(d) { return d.selected && !d.isLastModule ? "16px" : "10px"; })
 .style("font-weight", function(d) { return d.selected && !d.isLastModule ? "bold" : ""; })
 .text(function(d) { return d.name; });
 text.append("tspan")
.style("font-size", function(d) { return d.selected && d.isLastModule ? "16px" : "10px"; })
.style("font-weight", function(d) { return d.selected && d.isLastModule ? "bold" : ""; })
.text(function(d) { return d.moduleList; });