为什么.html()不能与使用jquery的SVG选择器一起使用?

时间:2012-07-09 13:49:40

标签: javascript jquery svg highcharts highstock

问题有人可以告诉我如何将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有一个getSVG()函数,我可以传递给canvg(),但问题是它没有得到最新的更新,所以我必须这样做,当运行{ {1}}功能我得到以下内容: enter image description here

LINK

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

对于您没有获得svg内容的问题,
如果页面上只有一张svg图表,请使用:

$('svg').html();

如果超过现在,那么请看看有一个highcharts_container div,因为他们创建了svg图表。如果你正在使用它们。
然后使用:

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