如何获取 svg:g 元素的宽度

Posted

技术标签:

【中文标题】如何获取 svg:g 元素的宽度【英文标题】:How to get the width of an svg:g element 【发布时间】:2012-07-27 00:37:43 【问题描述】:

我目前正在使用 javascript 中的 svg 元素。我是新手。

我的问题是我有一个 svg 元素,其中我有多个 svg:g 元素。在我的 svg:g 元素中,我还有其他各种 svg 元素。

    <svg>
     <g class="my-class">
      <g class "c1">
         <text style="font-size: 9" x="0" y="-4"> john </text>
         <text style="font-size: 9" x="70" y="-4"> 13 </text>
      </g> 
      <g class="c2">
         <text style="font-size: 9" x="0" y="-4"> john </text>
         <text style="font-size: 9" x="70" y="-4"> 13 </text>
      </g> 
      <g class="c3">
         <text style="font-size: 9" x="0" y="-4"> john </text>
         <text style="font-size: 9" x="70" y="-4"> 13 </text>
      </g> 
    </g>
   </svg>

g 动态附加到我的

g“我的班级”

现在我想将svg 的宽度设置为等于g.my_class 的宽度。

var svgWidth  =   $('.my-class').width()
alert(svgWidth);

但它给了我零。我怎么能在浏览器的黄色工具提示框中看到它

当我选择这一行时。

有人可以指导我吗?我这样做对吗,或者我怎样才能做到这一点? 谢谢

【问题讨论】:

【参考方案1】:

试试.getBoundingClientRect

$('.my-class')[0].getBoundingClientRect().width;

演示http://jsfiddle.net/5DA45/

【讨论】:

非常感谢@Esailija。但我想问一件事,它给我的宽度值等于 10 + 工具提示框中的宽度值。知道为什么会这样 感谢@Esailija 的工作,是的,我更喜欢getBoundingClientRect() 而不是getBBox()。原因是当我需要“g”的宽度时,我需要根据 SVG 测量的实际宽度。而 getBBox() 为我们提供了基于 Viewbox 大小的宽度,无论 SVG 的大小如何。即使我将 SVG 的大小调整为 12px(视图框大小为“0 0 409.215 550.197”)getBBox() 给我 4.09.215 而我需要 SVG 的原始大小应该是“8.920745849609375”所以 getBBox 并不是真正有用的功能SVG 中 g 的大小。 所以高度使用 $('.my-class')[0].getBoundingClientRect().height;【参考方案2】:

我会推荐 getBBox(它是 SVG 1.1 的一部分)而不是 getBoundingClientRect(它不是):

$('.my-class')[0].getBBox().width;

演示http://jsfiddle.net/TAck4/

【讨论】:

为什么你会推荐它? 就像它说的那样,因为 getBBox 是 SVG 规范的必需部分,而 getBoundingClientRect 不是。 @Yarin - 另外,请注意,只有 getBBox 获得 svg 内左上角的正确坐标(-20,-10):jsfiddle.net/QGN6c/20 请注意,getBBox 返回的值是 SVG 坐标,而 getBoundingClientRect 返回渲染坐标。在带有 viewBox 而不是宽度和高度的 SVG 中,返回的值可能不同。

以上是关于如何获取 svg:g 元素的宽度的主要内容,如果未能解决你的问题,请参考以下文章

如何获取html元素的宽度并将像素转换为百分比[关闭]

如何获取网页中元素的溢出宽度

如何获取数组中每个dom元素的宽度?

如何在具有特定宽度和高度的矩形中获取 svg 文本元素?

如何获取 HTML5 画布的宽度和高度?

如何在Angular2中获取(DOM)元素的宽度