如何使用原始JavaScript找到div的宽度?

Jod*_*aki 244 html javascript

如何<div>使用像jQuery 这样的库的情况下以跨浏览器兼容的方式找到a的当前宽度?

And*_*y E 367

document.getElementById("mydiv").offsetWidth
Run Code Online (Sandbox Code Playgroud)

  • `offsetWidth`包括边框宽度,`clientWidth`没有. (117认同)
  • 那个,或者`cientWidth`,虽然我不知道真正的区别. (8认同)
  • @nim如果您的div具有`display:none`或不是文档的一部分,它将始终具有零偏移高度. (4认同)
  • [这个答案](/sf/ask/1474487101/分别)对`offsetWidth`和`clientWidth`的区别有详细的视觉解释。 (2认同)

小智 33

您可以使用clientWidthoffsetWidth Mozilla开发人员网络参考

这将是:

document.getElementById("yourDiv").clientWidth; // returns number, like 728
Run Code Online (Sandbox Code Playgroud)

或带边框宽度:

document.getElementById("yourDiv").offsetWidth; // 728 + borders width
Run Code Online (Sandbox Code Playgroud)


use*_*883 15

另一种选择是使用 getBoundingClientRect 函数。请注意,如果元素的显示为“无”,则 getBoundingClientRect 将返回一个空矩形。

var elem = document.getElementById("myDiv");
if(elem) {
   var rect = elem.getBoundingClientRect();
   console.log(rect.width);  
}
Run Code Online (Sandbox Code Playgroud)


小智 8

所有答案都是正确的,但我仍然想提供其他一些可行的替代方案.

如果您正在寻找指定的宽度(忽略填充,边距等),您可以使用.

getComputedStyle(element).width; //returns value in px like "727.7px"
Run Code Online (Sandbox Code Playgroud)

getComputedStyle允许您访问该元素的所有样式.例如:padding,paddingLeft,margin,border-top-left-radius等.


小智 6

您还可以使用 ClassName 搜索 DOM。例如:

document.getElementsByClassName("myDiv")
Run Code Online (Sandbox Code Playgroud)

这将返回一个数组。如果您对某一特定属性感兴趣。例如:

var divWidth = document.getElementsByClassName("myDiv")[0].clientWidth;
Run Code Online (Sandbox Code Playgroud)

divWidth 现在将等于 div 数组中第一个元素的宽度。