javascript - 如何使用 D3.js 包裹长文本标签?

标签 javascript d3.js text word-wrap

我使用 D3 创建了一个节点树,并且想了解如何换行太长的文本。

  nodeUpdate.select("text")
      .text(function(d) {
        if(d.name == "root"){
            return "";
        } else {
            return d.name;
        }
       })
      .style("font-family", "Verdana")
      .style("fill-opacity", 1);

如果 d.name 太长,我希望它填充几行而不是一行。我找到了这个http://bl.ocks.org/mbostock/7555321但我似乎不明白这是如何工作的,而且我当然不明白“wrap”函数如何获取它的输入?在此示例中,wrap 函数在调用时没有参数。

最佳答案

代码来自http://bl.ocks.org/mbostock/7555321有两个关键部分。

wrap()的调用完成

svg.append("g")
  .attr("class", "x axis")
  .attr("transform", "translate(0," + height + ")")
  .call(xAxis)
.selectAll(".tick text")
  .call(wrap, x.rangeBand());

它需要一个文本元素和一个宽度,就像在

中所做的那样
node.append("text")
  // Make sure to have a text element
  .text(function(d) {
    return d.name;
  })
  .call(wrap, 50);

这里令人困惑的部分是调用语句适用于当前选择,例如 .tick text 或所有节点。

第二部分是必需的text.text(),否则不起作用。

function wrap(text, width) {
  text.each(function() {
  var text = d3.select(this),
      words = text.text().split(/\s+/).reverse(),

关于javascript - 如何使用 D3.js 包裹长文本标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802534/

相关文章:

javascript - 为什么 javascript 不显示警报?

javascript - 使用 Symfony Webpack Encore 未定义的 DataTables API

javascript - d3.js 散布饼图标签

javascript - x 轴和绘图不同步

image - 数学: Add text to imported image/graphic as a label

javascript - replaceWith() 函数似乎无限次运行

javascript - 在 Ember.js 中获取路由列表

javascript - 缩放 D3 map 时出错

java - 使用 UTF-16 将文本绘制到 Canvas

react-native - 是否可以在 react native 中将文本/字符串的第一个字母大写?怎么做?