7

为了渲染 SVG,我使用了 jQuery SVG 插件。而且,现在我想为每个路径和多边形添加文本。在jsFiddle 上,您可以看到插件生成的标记。

为了创建文本,我编写了以下代码:

var svgg = $("#rsr").svg('get');
var texts = svgg.createText();
svgg.textpath($("#Layer_x0020_1"),id, texts.string('We go ').
   span('up', { dy: -30, fill: 'red' }).span(',', { dy: 30 }).
   string(' then we go down, then up again'));

jsFiddle上的代码中,您可以看到textpath标签存在,但不可见。如何在每条路径的中心添加文本?
谢谢。

4

2 回答 2

14

要将文本沿直线放置在形状顶部,在边界框的中间,请参阅:

http://jsfiddle.net/dYuAA/114/

它只是添加了一些 javascript 来放置文本。

function addText(p)
{
    var t = document.createElementNS("http://www.w3.org/2000/svg", "text");
    var b = p.getBBox();
    t.setAttribute("transform", "translate(" + (b.x + b.width/2) + " " + (b.y + b.height/2) + ")");
    t.textContent = "a";
    t.setAttribute("fill", "red");
    t.setAttribute("font-size", "14");
    p.parentNode.insertBefore(t, p.nextSibling);
}

var paths = document.querySelectorAll("path");
for (var p in paths)
{
    addText(paths[p])
}

以上仅查看路径元素,但您可以调整选择器以包含您需要的任何内容。

于 2012-06-13T10:32:12.433 回答
1

这里有几个问题。

a) SVG 区分大小写,因此它是 textPath 而不是 textpath。

b) textPath 必须包含在一个<text>元素中才有效

这是你的jsFiddle 修复了

于 2012-06-12T09:38:54.293 回答