2011-05-15 46 views
0

在jQuery中SVG插件(http://plugins.jquery.com/project/svg)与SVG工作执行从DIV元素开始和创建div中新的SVG对象:SVG通过jQuery.svg

Attach an SVG canvas to a with the following:

$(selector).svg(); 

是否有可能与连接jquery到现有的svg对象?如果“是”如何做到这一点?

编辑: 司机小费

<body onload="alert('loaded');testSvg();"> 
    <div id="div3" style="border: solid 1px black; width:200px; height:100px"> 
     <svg id="svg3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"></svg> 
    </div> 

    <script type="text/javascript"> 
    function testSvg() { 
     var svgRootElement = $("#svg3").get(); 
     var svgWrapper = new $.svg._wrapperClass(svgRootElement); 
     svgWrapper.circle(30, 25, 50, { fill: 'red' }); 
    } 

导致错误:

'TypeError: Unable to get value of the property 'createElementNS': object is null or undefined' error...

为什么呢?

+0

我建议你出打破编辑成新问题。我对如何回答这个问题有了一个想法,但是在这里回答它会太混乱。 – jbeard4 2011-05-15 21:14:33

+0

完成:http://stackoverflow.com/questions/6033939/how-to-create-jquery-wrapper-on-existing-svg-object – Budda 2011-05-17 16:19:15

回答

1

是的,这是可能的。它被描述为here,虽然有点难以找到。如果您使用内联SVG(例如,你使用的不是对象标记,或者一个iframe嵌入SVG到HTML),那么下面应该工作:

$(document).ready(function(){ 
var svgRootElement = $("#myExistingSVGObject"); 
var svgWrapper = new $.svg._wrapperClass(svgRootElement); // this is the equivalent of what is returned from the call to .svg() 
}) 
+0

它是否需要在'准备好'功能?我可以在身体部分的末尾做同样的事吗?我试过了,似乎不太可行... – Budda 2011-05-15 16:51:26

+0

是的,你可以把它放在正文部分末尾的脚本元素中。因为元素以文档顺序加载,所以您必须执行此操作,或将其包装在文档就绪回调中。通常情况下,最好将脚本放在head元素中,这就是为什么大多数JavaScript库包含一个用于监听dom ready事件的跨浏览器解决方案的原因。尽管如此,无论哪种方式都应该可行 – jbeard4 2011-05-15 17:03:39

+0

问题:'svg()'返回了什么?我只使用'svg'变量,它被传递到.svg({onLoad:MyMethod})中使用的'onLoad'方法; ...如何使用'clean'svg()? – Budda 2011-05-15 18:13:51