如何在javascript中换行svg文本
How to linebreak an svg text in javascript?
我从d3.js开始,并试图创建一个网络图,每个圆圈都包含一个标签。
我想要的是 svg 文本的换行符。
我试图做的是将文本分成多个<tspan>
,每个 x="0" 和变量"y"来模拟实际的文本行。我编写的代码给出了一些意想不到的结果。
var text = svg.selectAll("text").data(force.nodes()).enter().append("text");
text
.text(function (d) {
arr = d.name.split(" ");
var arr = d.name.split(" ");
if (arr != undefined) {
for (i = 0; i < arr.length; i++) {
text.append("tspan")
.text(arr[i])
.attr("class", "tspan" + i);
}
}
});
在此代码中,我通过空格拆分文本字符串,并将每个拆分的字符串附加到 tspan。但是属于其他圆圈的文字也显示在每个圆圈中。如何克服这个问题?
这是一个只有 svg 文本的 JSFIDDLE http://jsfiddle.net/xhNXS/
这是一个JSFIDDLE http://jsfiddle.net/2NJ25/16/显示了我对tspan的问题。
您需要指定每个tspan
元素的位置(或偏移量)以给人一种换行符的印象——它们实际上只是您可以任意放置的文本容器。如果您将text
元素包装在g
元素中,这将容易得多,因为这样您就可以指定"绝对"坐标(即 x
和 y
) 表示其中的元素。这将使tspan
元素更容易移动到行的开头。
添加元素的主代码如下所示。
text.append("text")
.each(function (d) {
var arr = d.name.split(" ");
for (i = 0; i < arr.length; i++) {
d3.select(this).append("tspan")
.text(arr[i])
.attr("dy", i ? "1.2em" : 0)
.attr("x", 0)
.attr("text-anchor", "middle")
.attr("class", "tspan" + i);
}
});
我正在使用 .each()
,它将为每个元素调用函数,并且不希望返回值而不是您使用的.text()
。dy
设置指定行高,x
设置为 0 表示每条新行都将从块的开头开始。
这里修改了jsfiddle,以及其他一些小的清理。
相关文章:
- 如何在映射数组中添加换行符
- JQuery:向多个匹配结果添加换行符的最简单方法
- 在文本区域中使用jQuery.text()保持换行符
- Internet Explorer中的文本换行错误
- 从Javascript警报中防止换行
- javascript替换换行符和特殊字符
- 换行符拆分返回“”;未定义”;
- javascript中换行的regexp
- 编辑数据库输入时在文本框上换行
- 在 JS 中添加字符串之前强制换行
- 如何使用web浏览器在NoSQL数据中呈现换行符
- 换行符插入jquery选择器
- jquery使用val()复制值似乎可以删除换行符
- 文本区域-获取每一行,找到换行符
- 处理字段中带有换行符的csv文件-node.js
- 使用jquery将单个换行符替换为span元素
- javascript/jQuery:在title中添加换行符——在IE9中有效,但在IE8中无效
- 如何在javascript中换行svg文本
- 如何在javascript中换行svg文本
- SVG:使用getComputedTextLength来换行文本