闻心阁

一蓑烟雨看苍生,半壶浊酒笑红尘

JavaScript和jQuery中获取div宽度和高度的方法小记

2016-05-23 约 1 分钟读完 搬砖秘籍

前文 关于CSS中box-sizing属性的一点心得 中介绍了关于box-sizing 并顺带写了一下盒模型,突发奇想了一个问题:使用 JavaScript 和 jQuery 获取的宽度是盒模型中的哪一部分的宽和高呢?

先写一个测试

代码如下:

<style type="text/css">
  *{
    padding:0;
    margin:0;
  }
  #picdiv{
    width      : 400px;
    height     : 300px;
    background : green;
    padding    : 30px;
    border     : 5px dashed darkblue;
    margin     : 3px;
    float      : left;
  }
  #picdiv img{
    width   : 100%;
    height  : 100%;
    display : block;
  }
  
</style>
<div id="picdiv">
  <img src="ly.jpg" alt=""/>
</div>

如图:

以宽度为例

  • div本身宽度 : 400px
  • padding : 30px
  • border : 5px
  • margin : 3px

在控制台打印如下代码:

<script>
  console.log( 'jQuery.width: ' + $(' #picdiv ').width() );
  console.log( 'jQuery.innerWidth: ' + $(' #picdiv ').innerWidth() );
  console.log( 'jQuery.outerWidth: ' + $(' #picdiv ').outerWidth() );
  console.log( 'jQuery.outerWidthTrue: ' + $(' #picdiv ').outerWidth( true ));
  console.log( 'clientWidth: ' + document.querySelector('#picdiv').clientWidth );
  console.log( 'offsetWidth: ' + document.querySelector('#picdiv').offsetWidth );
</script>

结果:

可以发现:

jQuery.width = 原始div宽度 jQuery.innerWidth = div+padding jQuery.outerWidth = div+padding+border jQuery.outerWidth(true) = div+padding+border+margin

clientWidth = div+padding = jQuery.innerWidth offsetWidth = div+padding+border = jQuery.outerWidth

同理高度的值也符合上述规律。

结语

那么使用原生JavaScript能否获取到原始div宽度及外盒宽度呢?

(当然可以,要不jQuery怎么来的。。)