Проблема с решением с помощью gilly3 заключается в том, что координата x элементов является абсолютной.При изменении текста, например bold.attr({"text":"sorcerer"})
, элементы будут перекрываться.
Альтернативное решение - создать текстовый элемент из пользовательских элементов tspan
с относительным позиционированием.Это также немного чище с точки зрения объектной модели.Тем не менее, это требует некоторых прямых манипуляций с текстовым элементом.Код:
var content = paper.text(20, 20, "The magical").attr({ "text-anchor": "start" });
var txt1=Raphael._g.doc.createTextNode(" wizard ");
var txt2=Raphael._g.doc.createTextNode("ruled the world!");
var svgNS = "http://www.w3.org/2000/svg";
var ts1 = Raphael._g.doc.createElementNS(svgNS, "tspan");
var ts2 = Raphael._g.doc.createElementNS(svgNS, "tspan");
ts1.setAttribute("font-weight","bold");
ts1.appendChild(txt1);
ts2.appendChild(txt2);
content.node.appendChild(ts1);
content.node.appendChild(ts2);
content.node.children[1].textContent=" sorcerer ";
Отказ от ответственности: Рафаэль может изменить относительное положение tspans при изменении x,y,dx,dy
родительского элемента, даже если сам svg может с этим справиться.Вместо этого можно использовать строку преобразования.Пример:
content.node.setAttribute("x",500); //works
content.attr({"x":500}); //undesired result
content.transform("t100"); //works