javascript - D3 根据对象的子项更改对象的宽度属性

标签 javascript css d3.js

我正在尝试在 D3 中创建某些内容后更改其整个框架的宽度,具体取决于其中某些文本的宽度(这样它就不会被切断)。但是,我无法返回文本元素的宽度。

主体看起来像这样:

this.body = d3.select("#" + this.placeholderName)
  .append("svg:svg")
  .attr("class", "gauge")
  .attr("width", this.config.size)
  .attr("height", this.config.size + 150);

正文中的文本如下所示:

this.body.append("svg:text")
  .attr("x", this.config.cx - 60)
  .attr("y", this.config.cy / 2 + fontSize / 2)
  .attr("dy", fontSize / 2)
  .attr("text-anchor", "start")
  .text(this.config.label)
  .style("font-size", fontSize + "px")
  .style("fill", "#333")
  .style("stroke-width", "0px")

最后,我用这个改变了框架的宽度。我需要在此处输入什么作为第二个参数?

this.body.attr("width", <WIDTH OF TEXT ABOVE>);

谢谢

最佳答案

首先,当您创建文本元素时,为其指定一个类或 ID,以便稍后轻松选择它。

假设您给它 .attr('class', 'bodyText')

然后你可以使用 SVGTextContentElement.getComputedTextLength() 得到它的长度

您可以通过使用 selection.node() 从 d3 选择中获取实际的文本元素,然后在节点上调用该方法来为您的文本节点获取此值。像这样:

var textLength = d3.select('.bodyText').node().getComputedTextLength();

然后您可以在设置宽度属性时使用此值。

关于javascript - D3 根据对象的子项更改对象的宽度属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24959867/

相关文章:

html - 居中对齐时如何使单选按钮齐平?

javascript - 如何使用按钮切换 d3.js 中的 .csv 文件?

javascript - 厚脸皮的正则表达式帮助 : substring or match numerical part of string

javascript - 隐藏和显示侧边栏 div

javascript - 如何从多行 tsv 文件访问数据

javascript - react +D3 : Data over Y AXIS in scatter plot not appear correctly

javascript - Crossfilter 对过滤后的维度进行分组

javascript - 如何在从 javascript(Internet Explorer 和 Edge)更改后重绘 SVG

css - #nav-bar li :hover ul not working?

php - 如果 Twitter Bootstrap 不存在 4 列宽的 div,则将 8 列宽的 div 设置为所有 12 列