2012-07-09 74 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(); 
相關問題