2012-07-09 49 views
15

问题有人能告诉我如何将我的SVG元素转换为字符串?为什么.html()不支持使用jquery的SVG选择器?

我使用canvg将我的SVG转换为图像。

它具有在画布待渲染第一,canvg()方法需要另外一种SVG STRING

代码:

function updateChartImage(){ 
     canvg(document.getElementById('canvas'),expecting ` svg string`); 
     var canvas = document.getElementById("canvas") ; 
     var img = canvas.toDataURL("image/png"); 
     img = img.replace('data:image/png;base64,', ''); 
     $("#hfChartImg").val(img) ; 
     $('#img').attr({ src: img }); 
     } 

我试图

$('#container svg').html() ; // it gives me an error 
//Uncaught TypeError: Cannot call method 'replace' of undefined 

通知,

$('#container svg') 
    $('#container').html() // both works fine and 

更新

我使用highcharts的有,我可以传递给canvg(一getSVG()函数),但问题是这么想的获得最新的更新,所以我必须做这种方式,在运行getSVG()功能时,我得到以下几点: enter image description here

LINK

+0

从他们的文档, “canvg是一个SVG解析器和渲染器。”。如果您已经拥有SVG,无论是作为字符串还是URL参考,都可以将其加载到画布中,然后使用您描述的画布方法来提取图像。但是你需要从SVG开始。这就是图书馆的目的。 – 2012-07-09 13:59:52

+0

我想我应该提到我正在使用highcharts,请参阅我的更新 – 2012-07-09 14:05:30

+0

maby等到dom准备好了吗? 'document.ready()' – 2012-07-09 14:35:19

回答

21

至于我记得jQuery的.html()利用了innerHTML这是为HTML,不是svg。 SVG的是XML文件,所以你可以使用XMLSerializer()

var svg = document.getElementById('svg_root'); // or whatever you call it 
var serializer = new XMLSerializer(); 
var str = serializer.serializeToString(svg); 
+0

你能告诉我们如何做到这一点在以下[jsFiddle](http://jsfiddle.net/minagabriel/uaxZP/4/)我试过了,它没有工作....谢谢Duopixel – 2012-07-09 15:02:14

+0

http:// jsfiddle.net/z8gWw/您可能错过了编号 – Duopixel 2012-07-09 15:23:06

+1

或者您可以使用'var svg = $(“#container svg”)[0];'从选择器中获取没有ID的DOM元素。 – Rup 2012-07-09 15:31:15

0

对于你没有得到你的SVG内容的问题,
如果只有一个SVG图表页面上,然后使用:

$('svg').html(); 

,如果超过目前,请看看有一个highcharts_container的div,因为他们创建该svg图表。如果你正在使用它们。
然后使用:

$('id of that div').html(); 
相关问题