JS获取display为none的隐藏元素的宽度和高度的解决方案
有时候,我们一进入页面,就需要获取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的隐藏元素的宽度和高度的解决方案的更多相关文章
- JS无法获取display为none的隐藏元素的宽度和高度的解决方案
在实际开发中会遇到确实需要获取隐藏元素的宽高,这儿所说的隐藏元素是display为none的元素. 可使用jQuery Actual Plugin插件来完成,其源码如下: ;( function ( ...
- jQuery获取display为none的隐藏元素的宽度和高度的解决方案
1.利用给元素添加行内样式:visibility:hidden;display:block 2.让隐藏元素变成有物理尺寸存在,但不可见,获取元素宽高 3.再给它还原成display为none,去除vi ...
- jQuery获取或设置元素的宽度和高度
jQuery获取或设置元素的宽度和高度: 可使用以下3种方法: 1,jQuery width() 和 height() 方法: 2,innerWidth() 和 innerHeight() 方法: 3 ...
- 使用jQuery获取元素的宽度或高度的几种情况
今天说说使用jQuery获取元素大小的遇到几种情况 使用jQuery获取元素的宽度或高度的有几种情况: 1.使用width(),它只能获取当前元素的内容的宽度: 2.使用innerWidth(),它只 ...
- box-sizing属性(指定针对元素的宽度与高度的计算方法)
在css中,使用width属性与height属性来指定元素的宽度与高度.使用box-sizing属性,可以指定用width属性与height属性分别指定的宽度值与高度值是否包含元素的内部补白区域与边框 ...
- 【提取元素的值 】【追加文本append】【删除文本remove】【class的操作】【读取元素的宽度,高度】
1.取值 $("#test").text() //取id=test里面的文字 $("#test&qu ...
- js操作:selenium无法操作隐藏元素问题
对于前端隐藏元素,一直是selenium自动化定位元素的隐形杀手,脚本跑到隐藏元素时位置时报各种各样的错误, 隐藏的下拉菜单又没有办法避免,此帖只为交流隐藏元素自动化定位处理方法(3种操作) ...
- js获取iframe和父级之间元素,方法、属,获取iframe的高度自适应iframe高度
摘自:http://blog.csdn.net/kongjiea/article/details/38870399 1.在父页面 获取iframe子页面的元素 (在同域的情况下 且在http://下测 ...
- 原生js获取display属性注意事项
原生js获取diaplay属性需要在标签上写行间样式style='display:none/block;' <div style="display:block;">&l ...
随机推荐
- eclipse 插件编写(一)
由于项目开发进程中有一些重复性的代码进行编写,没有任何业务逻辑,粘贴复制又很麻烦且容易出错,故想起做一个eclipse插件来满足一下自己的工作需要,同时记录一下,以供以后参考与共同学习.本文主要讲解一 ...
- NBU客户端安装失败
该服务器是阿里云上的centos6.8,是用来做oracle服务器,买来之后进行测试,发现没有安装图形化界面,还有部分包也没有安装.在oracle安装完成之后,尝试安装NBU的客户端,结果发生报错:T ...
- 解决xp越来越慢的办法(其中有些自动备份的功能)
1.减少磁盘空间占用2.终止不常用的系统服务3.安全问题4.另外一些技巧 首先问一下,你是不是很想激活XP,不...准确的说你是不是想在ms的站上能够升级.如果答案是肯定的话,那我们就先来探讨一下安装 ...
- c# 关于TreeView的一点性能问题
我们要知道,treeview在新增或删除treeNode的时候会进行重绘,这也就是为什么大量数据的时候,treeview很卡.很慢的原因, 那么我们这样 treeview1.BeginUpdate() ...
- VS使用的快捷方式
VS常用快捷键 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”: 2)前进到下一个光标位置:“Ctrl + Shift + - ”. 2.复制/剪 ...
- sql 日志恢复
可能有不少朋友遇到过这样的问题: update或delete语句忘带了where子句,或where子句精度不够,执行之后造成了严重的后果,这种情况的数据恢复只能利用事务日志的备份来进行,所以如果你的S ...
- Application生命周期(一)
1.Application是什么? Application和Activity,Service一样,是android框架的一个系统组件,当android程序启动时系统会创建一个 application对 ...
- git上如何处理无法clone和merge
对于一些需要FQ才能克隆下来的项目,我们需要使用代理 进入terminal: 设置代理: git config --global http.proxy http://127.0.0.1:1087 gi ...
- .NET架构开发应知应会
.NET程序是基于.NET framework..NET Core.Mono.UWP[.NET实现]开发和运行的 ,定义以上[.NET实现]的标准规范称为.NET Standard L1:.NET S ...
- 设计模式之策略模式和状态模式(strategy pattern & state pattern)
本文来讲解一下两个结构比较相似的行为设计模式:策略模式和状态模式.两者单独的理解和学习都是比较直观简单的,但是实际使用的时候却并不好实践,算是易学难用的设计模式吧.这也是把两者放在一起介绍的原因,经过 ...