更改svg字符串中的信息

时间:2013-01-02 10:53:09

标签: javascript jquery string svg

我有一个svg字符串。 为了获得信息,我在这个链接中得到了答案how to get information from a svg string in javascript? usign jquery。但有谁知道如何更改任何属性?例如,如何将第2层的rect的高度更改为其他值?如何添加一个不存在的新属性?例如,在第2层的矩形中添加stroke-dasharray =“1,1”?感谢

<svg width="612" height="394" xmlns="http://www.w3.org/2000/svg">
 <g>
     <title>Layer 1</title>
     <rect id="svg_1" height="152" width="265" y="44" x="91" stroke-width="5" stroke="#000000" fill="#FF0000"/>
 </g>
 <g>
     <title>Layer 2</title>
     <rect id="svg_2" height="125" width="151" y="157" x="399" stroke-width="5" stroke="#000000" fill="#FF0000"/>
 </g>
</svg>

我的字符串例如:str="<svg width........</g></svg>"

2 个答案:

答案 0 :(得分:2)

只需为其设置一个值,而不仅仅是检索..

使用jquery,您可以使用.attr()的第二个参数来设置值...

$('#svg_2').attr('height', 200);

$('#svg_2').attr('stroke-dasharray', "1,1");

演示 http://jsfiddle.net/gaby/FX67f/1/


如果你想要实际的字符串,并且svg不在DOM中而只是一个变量那么你可以做

var fixedstr = $(str).wrapAll('<div>')
                     .find('g:eq(1) rect')
                     .attr('height', 200)
                     .attr('stroke-dasharray', "1,1")
                     .closest('div')
                     .html();

首先我们从中创建一个jquery对象,然后将它包装在div元素中,以便我们以后可以得到它.html()实际的svg字符串

使用g在第二个.find('g:eq(1) rect')元素中找到rect,然后使用.attr()更改其属性..

最后使用.closest('div')返回我们的容器div,并使用.html()获取内容..

此版本的演示 http://jsfiddle.net/gaby/FX67f/2/

答案 1 :(得分:0)

我没试过,但它应该有效: 设置一个新值:

$("svg").find("rect#svg_2").attr("height", new_val);