有时候,我们一进入页面,就需要获取display为none元素的物理尺寸(宽高),或获取display为none元素的子元素的物理尺寸(宽高),本篇文章就如何解决以上问题给出自己的解决方案

获取display为none元素的子元素的物理尺寸
方案一思路:

1、利用给元素添加行内样式:display:block;position:absolute;z-index:-1000
2、让隐藏元素变成block同时利用定位带出可视区,再获取下面元素的物理尺寸后
3、再给它还原成display为none,最后返回结果

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>获获取display为none元素的子元素的物理尺寸 :解决方案一</title>
</head>
<body>
<div class="wrap" style="display: none;">
<ul>
<li>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
</li>
<li>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
</li>
<li>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
</li>
</ul>
</div>
</body>
<script> // 获取display为none元素下的子元素的高度
function getHeight(parentSelector,childSelector){
let wrap = document.querySelector(parentSelector);
let aLi = wrap.querySelectorAll(childSelector);
let arr = [];
wrap.style.cssText = `display:block;position:absolute;z-index:-1000;`
for (var i = 0; i < aLi.length; i++) {
arr.push(aLi[i].offsetHeight)
}
wrap.style.cssText = "display:none;"
return arr
}
console.log(getHeight('.wrap','li'))
</script>
</html>

方案二思路:不推荐
1、这个方法需要用户事件触发让隐藏元素显示出来
2、开启一个定时器,间隔判断隐藏元素是否显示了
3、如果显示了,清除定时器,拿到结果再去操作

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>获获取display为none元素的子元素的物理尺寸 :解决方案二</title>
</head>
<body>
<div class="wrap" style="display: none;">
<ul>
<li>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
</li>
<li>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
</li>
<li>
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
</li>
</ul>
</div> <button class="btn">按钮</button>
</body>
<script> // 获取display为none元素下的子元素的高度 let wrap = document.querySelector('.wrap');
let aLi = wrap.querySelectorAll('li');
let arr = [];
let timer=null;
timer = setInterval(function(){
// 用户操作后 让隐藏隐藏元素显示了 则获取结果 清除定时器
if(wrap.offsetHeight > 0){
for (var i = 0; i < aLi.length; i++) {
arr.push(aLi[i].offsetHeight)
}
clearInterval(timer) console.log(arr)
}
},1000) document.querySelector('.btn').onclick=function(){
wrap.style.cssText = "display:block;"
}
</script>
</html>

获取display为none元素的物理尺寸
解决思路:

1、利用给元素添加行内样式:visibility:hidden
2、让隐藏元素变成有物理尺寸存在,但不可见
3、再给它还原成display为none,最后返回结果

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>获取display为none元素的物理尺寸解决方案</title>
</head>
<body>
<div class="container" style="display: none;">
<p>前端技术</p>
<p>前端技术</p>
<p>前端技术</p>
</div>
</body>
<script> // 获取display为none元素的高度
function getSizeAttr(elementSelector,attrName){
let oDiv = document.querySelector(elementSelector);
oDiv.style.cssText = `visibility:hidden`
let attr = {
height: oDiv.offsetHeight,
width: oDiv.offsetWidth,
offsetLeft: oDiv.offsetLeft,
offsetTop: oDiv.offsetTop
}
oDiv.style.cssText = `display:none`;
return attr[attrName]
}
console.log(getSizeAttr('.container','width'))
console.log(getSizeAttr('.container','height'))
console.log(getSizeAttr('.container','offsetLeft'))
console.log(getSizeAttr('.container','offsetTop'))
</script>
</html>

小结:利用先把所有隐藏元素变成可以获取物理尺寸,获取完毕再给它变成隐藏,再返回我们需求的物理尺寸是关键。

转自http://moxiaofei.com/2019/07/13/getsize/

JS获取display为none的隐藏元素的宽度和高度的解决方案的更多相关文章

  1. JS无法获取display为none的隐藏元素的宽度和高度的解决方案

    在实际开发中会遇到确实需要获取隐藏元素的宽高,这儿所说的隐藏元素是display为none的元素. 可使用jQuery Actual Plugin插件来完成,其源码如下: ;( function ( ...

  2. jQuery获取display为none的隐藏元素的宽度和高度的解决方案

    1.利用给元素添加行内样式:visibility:hidden;display:block 2.让隐藏元素变成有物理尺寸存在,但不可见,获取元素宽高 3.再给它还原成display为none,去除vi ...

  3. jQuery获取或设置元素的宽度和高度

    jQuery获取或设置元素的宽度和高度: 可使用以下3种方法: 1,jQuery width() 和 height() 方法: 2,innerWidth() 和 innerHeight() 方法: 3 ...

  4. 使用jQuery获取元素的宽度或高度的几种情况

    今天说说使用jQuery获取元素大小的遇到几种情况 使用jQuery获取元素的宽度或高度的有几种情况: 1.使用width(),它只能获取当前元素的内容的宽度: 2.使用innerWidth(),它只 ...

  5. box-sizing属性(指定针对元素的宽度与高度的计算方法)

    在css中,使用width属性与height属性来指定元素的宽度与高度.使用box-sizing属性,可以指定用width属性与height属性分别指定的宽度值与高度值是否包含元素的内部补白区域与边框 ...

  6. 【提取元素的值 】【追加文本append】【删除文本remove】【class的操作】【读取元素的宽度,高度】

    1.取值 $("#test").text()                                    //取id=test里面的文字 $("#test&qu ...

  7. js操作:selenium无法操作隐藏元素问题

    对于前端隐藏元素,一直是selenium自动化定位元素的隐形杀手,脚本跑到隐藏元素时位置时报各种各样的错误, 隐藏的下拉菜单又没有办法避免,此帖只为交流隐藏元素自动化定位处理方法(3种操作)      ...

  8. js获取iframe和父级之间元素,方法、属,获取iframe的高度自适应iframe高度

    摘自:http://blog.csdn.net/kongjiea/article/details/38870399 1.在父页面 获取iframe子页面的元素 (在同域的情况下 且在http://下测 ...

  9. 原生js获取display属性注意事项

    原生js获取diaplay属性需要在标签上写行间样式style='display:none/block;' <div style="display:block;">&l ...

随机推荐

  1. qt 维护x86和arm两套编译环境

    1.中间库: 中间库都放在middlewares目录,include头文件相同,所以不需要特殊处理,只要特殊处理lib安装目录, 示例pro文件如下: TEMPLATE = lib TARGET = ...

  2. nginx 配置https并自签名证书

    2016-10-28 转载请注明出处:http://daodaoliang.com/ 作者: daodaoliang 版本: V1.0.1 邮箱: daodaoliang@yeah.net 参考链接: ...

  3. Oracle_虚拟机安装教程

    需修改两个东西 一个为内存 内存改为4G 一个为加载CD/DVD文件 DVD文件为:Centos 6.9镜像 改完这两个东西之后 再启动 启动成功之后 Oracle虚拟机登录密码为 root 1234 ...

  4. SYN011型 B码时统

       SYN011型 B码时统 产品概述 SYN011型B码时统是由西安同步电子科技有限公司精心设计.自行研发生产的一款专用时统设备,从GPS/北斗卫星上/和外部输入的IRIG-B码获取标准时钟信号信 ...

  5. 【转载】Chrome使用自定义协议打开本地程序并运行IE打开网页

    部分内容转载自: http://blog.sina.com.cn/s/blog_e2b8213a0102wqby.html 项目中遇到某需求:chorme要运行IE并打开网页.解决方案之一就是通过自定 ...

  6. python下SQLAlchemy的使用

    SQLAlchemy是python中orm常用的框架.支持各种主流的数据库,如SQLite.MySQL.Postgres.Oracle.MS-SQL.SQLServer 和 Firebird. 在安装 ...

  7. Django框架之前端渲染-模板层

      Django 模板层   Django 模板层 前后端数据传递 (1) 后端朝前端页面传递数据的方式: # 将当前所在的名称空间中的名字全部传递给前端页面 # 第一种 return render( ...

  8. CentOS7.x mini安装OVS

    命令均在root用户下运行: 一.关闭防护墙及selinux sed -i '/SELINUX/s/enforcing/disabled/g' /etc/selinux/config setenfor ...

  9. FPM

    https://github.com/pangudashu/php7-internal/blob/master/1/fpm.md

  10. CI框架中的奇葩

    今天在win下开发,使用ci框架,本来是没有任何问题,然后转向了mac上开发,结果出现了个奇葩的问题,就是在ci框架中,控制器命名以"Admin_"为前缀的,在url中,控制器也必 ...