开篇的话

任何不是亲身实践中求得的知识,都不是属于你的。

任何求得的知识不去时常温习运用,也不是属于你的。

记录由来

在做个上拉广告功能中遇到了一个“理所当然”觉得对的用法,慢慢才排查出是获取元素高度那里出了问题,这个问题记忆在书上或视频中看到过,许久没用,用的时候就想当然了。遂决定深入剖析用法,增加记忆,记录发表出来,也能给各位前端同行、求学者增加印象。

出错之处

秉承结构、样式、行为分离的宗旨,每次不管大小案例都是分开写html、css、js。这也算抛砖引出了我犯错的玉。

原css:

原js获取DOM元素高度:

var adcon = document.getElementById('adcon');

var maxH = parseInt(adcon.style.height);

这样写之后在console的时候发现:

返回值为NaN。 Orz...

排查错误,找出原因

写个例子测试一下:

仔细查找CSSStyleDeclaration发现height对应值为空

这样就知道为什么会返回NaN了。

那为什么会是""的,百一下谷一下测试一下发现:

这个test.style.xxx 这里只能获取的值是标签元素行内样式的值。

也就是说如果这样写:

CSSStyleDeclaration里才会包括:

这种方式就会取得到值:

扩展需求解决办法,找到各个环境下的最优方法

关于原生JS取dom元素宽高的方法,我总结了以下五种方法,有遗漏的望各位网友提出,谢谢~

window.getComputedStyle(dom元素,'伪类').属性名

dom元素.clientHeight/clientWidth

dom元素.offsetHeight/offsetWidth

dom元素.scrollHeight/scrollWidth

dom元素.style.height/width

光说不练假把式,直接上codes来解释:

getComputedStyle()方法

这个方法是只读的,具体语法和应用的详细讲解可以参见张鑫旭大佬的这篇:传送门

由此可见,这个方法取得值是内容content区域的值,与padding、margin和边框无关。

dom元素.clientHeight/clientWidth方法

可见这是内容区域+上下padding的值。

dom元素.offsetHeight/offsetWidth

可见这是内容区域+两个padding+两个border的值

dom元素.style.height/width

这一开始分析过了,取得是元素行内样式的height值(内容区域的值)

dom元素.scrollHeight/scrollWidth

我给例子加了很多内容,出现滚动条:

测试结果:

由此可见,scrollHeight方法返回的还是content内容区域+两个padding的值。

scrollWidth方法返回的是正文内容的总宽度

以上是通过实际测试得出来的结论,个人认为比看一大片干巴巴的文字更容易理解。下一次在实战中遇见应该不会再犯错了。

小白一枚,浅面记录,如有错误、建议、缺漏,恳请指出。

原生js获取html元素高度,原生JS获取元素宽高实践详解相关推荐

  1. 5分钟学会js上传图片校验图片格式、大小、尺寸宽高

    js上传图片校验图片格式.大小.尺寸宽高 一.前言        js上传图片校验图片格式.大小.尺寸宽高.        在此记录下,分享给大家. 二.代码 <input type=" ...

  2. php 正则 花括号,JS+正则取得小括号、中括号及花括号内容步骤详解

    这次给大家带来JS+正则取得小括号.中括号及花括号内容步骤详解,JS+正则取得小括号.中括号及花括号内容的注意事项有哪些,下面就是实战案例,一起来看一下. JS 正则表达式 获取小括号 中括号 花括号 ...

  3. [css] img标签是行内元素,为什么却能设置宽高

    [css] img标签是行内元素,为什么却能设置宽高 原来CSS中还有一个概念:可替换元素MDN上是这么解释的:在 CSS 中,可替换元素(replaced element)的展现效果不是由 CSS ...

  4. html中js隐藏div的高度,jQuery实现获取隐藏div高度的方法示例

    jQuery实现获取隐藏div高度的方法示例 发布时间:2020-09-22 19:27:55 来源:脚本之家 阅读:95 作者:zhuyangxing 本文实例讲述了jQuery实现获取隐藏div高 ...

  5. js html 处理json数据,JS中Json数据的处理和解析JSON数据的方法详解

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族 ...

  6. 【JS 逆向百例】某网站加速乐 Cookie 混淆逆向详解

    声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除! 逆向目标 目标:加速乐加密 ...

  7. Android获取的状态栏高度,Android中获取状态栏高度的两种方法分享

    前言 最近在做一个关于FAB的功能的时候需要获取状态栏的高度,在网上查了很多种方法,下面是选出的比较合理的两个方法.主要参考stackoverflow的这篇问答:http://stackoverflo ...

  8. js 浅拷贝直接赋值_JS中实现浅拷贝和深拷贝的代码详解

    (一)JS中基本类型和引用类型 JavaScript的变量中包含两种类型的值:基本类型值 和 引用类型值,在内存中的表现形式在于:前者是存储在栈中的一些简单的数据段,后者则是保存在堆内存中的一个对象. ...

  9. JS中offsetTop、clientTop、scrollTop、offsetTop各位置属性详解(含示例图)

    这里是javascript中制作滚动代码的常用属性 页可见区域宽: document.body.clientWidth; 网页可见区域高: document.body.clientHeight; wi ...

最新文章

  1. html超链接button
  2. 被公司圈养的年轻人,如何避免被市场淘汰?
  3. 如何解决Office2016安装时提示:错误1406。安装程序无法将值写入注册表项\.xlsx
  4. mciSendString用法
  5. 站长常用广告代码的表达大全
  6. 没有任何基础学编程从哪开始_没有编程基础的朋友,学Python还是C/C++好,看了这个就明白了...
  7. Android之Android Studio常用插件
  8. [汇编语言]实验:应用更灵活的寻址方式来定位内存地址
  9. linux 用户、群组及权限操作
  10. java json float_java – Json解析问题(值自动更改为float)
  11. php 添加cdata,PHP cdata 处理 PHP cdata 处理(仔细讲解)
  12. html5 画布保存,html5 (canvas)画布save()和restore()的理解和使用方法
  13. REST是否会步SOAP的后尘?
  14. idea设置Java版本
  15. 关于代付和分账系统的区别
  16. C++循环结构设计——韩信点兵
  17. R绘图|相关性系数图
  18. Processor 处理器
  19. jQuery的使用(每一步都有注释说明,结构清晰,非常适合初学者,结合实例,通俗易懂,附带jQuery安装方法)
  20. HDU-5965 扫雷(dp / 递推)

热门文章

  1. Go :测试简单的布尔和数字常量(附完整源码)
  2. 用 Markdown 写炫酷简历,助力跳槽换工作
  3. 《勇气》(courageous)—随感
  4. 解决docker中 pytz.exceptions.UnknownTimeZoneError: ‘Etc/UTC‘ 错误
  5. python进制转换函数及方法
  6. Star-CCM+询问帖
  7. java计算机毕业设计江西婺源旅游文化推广系统源码+mysql数据库+系统+lw文档+部署
  8. 使用 PreloadPrefetch 优化前端页面的资源加载
  9. invalid authentication data.Connection refused :connect
  10. Oracle数据库—— 多表查询