使用jQuery获取SVG路径的边界框

Siv*_*ini 12 svg jquery-svg

我想在jquery中获取svg路径的getBBox().我试过这样的

$("#"+ path id)[0].getBBox() -> returns x=0,y=0,width=0,height=0
Run Code Online (Sandbox Code Playgroud)

我已经添加了SVG元素的路径.我在SVG中尝试了一些其他元素,例如文本节点,在这种情况下它返回一些边界框值.

如何计算SVG中路径的边界框?

<path id="container_svg_John_0" fill="none" stroke-width="3" stroke="url(#container_svg_John0Gradient)" stroke-linecap="butt" stroke-linejoin="round" d="M -2390.2 -125.8888888888889 L 0 0 M 0 0 L 251.60000000000002 -45.77777777777778 M 251.60000000000002 -45.77777777777778 L 503.20000000000005 -11.444444444444445 M 503.20000000000005 -11.444444444444445 L 629 -183.11111111111111 "/>
Run Code Online (Sandbox Code Playgroud)

Rob*_*son 12

getBBox是一个原生的SVG方法,不是jquery的一部分,所以你需要编写

$("#"+ path id)[0].getBBox()
Run Code Online (Sandbox Code Playgroud)

如果您为示例获取非零值并在代码中获得零值,那么必须有其他内容,您没有向我们展示.

最可能的原因是路径是一个孩子,<defs>即你只是在模式或clipPath中间接使用它,或者它的显示样式为none,在这种情况下它不会被渲染,因此没有边界框.


Nik*_*des 10

getBBox()Webkit中的本机实现是错误的,您可以在此处找到错误跟踪器.实际上现在已经修好

一个解决方案是使用一个SVG库,它有自己的算法来计算这些问题,其中一个是Raphael.js.

你可以使用Raphael's element.getBBox(),它和本机一样getBBox().


MSC*_*MSC 6

我也很难让JQuery语法为我工作.返回Uncaught TypeError:Object [object Object]没有方法'getBBox':

console.log($("#testtext").getBBox().width);
Run Code Online (Sandbox Code Playgroud)

...因为我省略了数组索引(感谢@Christian Vielma,下面)!

但是标准的Javascript对我有用,我能够在Chrome控制台中显示(在我的情况下)RECT的宽度:

console.log(document.getElementById("testtext").getBBox().width);
Run Code Online (Sandbox Code Playgroud)

所以你可以尝试一下.

  • 我相信你必须使用$('#testtext')[0] .getBBox().width (6认同)