如何在jquery中获取div元素的边界框

Siv*_*ini 42 html javascript css jquery svg

我想通过jquery/javascript计算div元素的边界框.

我试过这样的.

//Left side of box 
document.getElementById("myElement").offsetLeft; 
//Top side of box 
document.getElementById("myElement").offsetTop;  
//Right side of box
document.getElementById("myElement").offsetLeft + document.getElementById("myElement").offsetWidth; 
//Bottom side of box 
document.getElementById("myElement").offsetTop + document.getElementById("myElement").offsetHeight; 
Run Code Online (Sandbox Code Playgroud)

它返回一些值.是否正确获取div元素的边界框jquery / javascript.

我需要像元素中的getBBox()方法 一样的东西SVG.它将返回元素的x,y,宽度和高度.同样如何才能获得div元素的边界框.

谢谢,

湿婆

Ryc*_*het 106

因为这是专门为jQuery标记的 -

$("#myElement")[0].getBoundingClientRect();
Run Code Online (Sandbox Code Playgroud)

要么

$("#myElement").get(0).getBoundingClientRect();
Run Code Online (Sandbox Code Playgroud)

(这些在功能上是相同的,在一些旧的浏览器.get()中略快一些)

请注意,如果您尝试通过jQuery调用获取值,那么它将不会考虑任何css转换值,这可能会产生意外结果......

注意2:在jQuery 3.0中,它已经改为使用适当的getBoundingClientRect()调用来进行自己的维度调用(参见jQuery Core 3.0升级指南) - 这意味着其他jQuery答案最终总是正确的 - 但仅限于使用新的jQuery版本时 - 因此它被称为突破性改变的原因......


Rob*_*son 65

您可以通过调用getBoundingClientRect来获取任何元素的边界框

var rect = document.getElementById("myElement").getBoundingClientRect();
Run Code Online (Sandbox Code Playgroud)

这将返回一个具有left,top,width和height字段的对象.

  • 请注意,`getBoundingClientRect`将返回相对于视口的坐标,而不是文档或父级. (12认同)

小智 18

使用JQuery:

myelement=$("#myelement")
[myelement.offset().left, myelement.offset().top,  myelement.width(), myelement.height()]
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用`outerWidth()`而不只是`width()`.这样,它会考虑填充值(如果有的话). (3认同)
  • 这没有考虑到css变换 - 所以如果使用的话,不会给出正确的答案.它也可以通过缓存`offset()`结果来选择. (2认同)