有时候,我们一进入页面,就需要获取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. php获取一个月前的时间戳,获取三个月前的时间戳,获取一年前的时间戳

    strtotime 非常强大的一个获取时间戳的函数 php获取一个月前的时间戳: strtotime("-0 year -1 month -0 day"); php获取三个月前的时 ...

  2. win32Helper

    点击别的winform窗口的按钮 #region 点击别的窗口的按钮 [DllImport("user32.dll", EntryPoint = "FindWindowA ...

  3. 【全面解禁!真正的Expression Blend实战开发技巧】第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条

    原文:[全面解禁!真正的Expression Blend实战开发技巧]第九章 FluidMoveBehavior完全解析之二平滑运动的滚动条 这一章讲解FluidMoveBehavior的另一个应用, ...

  4. Vue-cli入门(一)——项目搭建

    Vue-cli入门(一)——项目搭建 前言: Vue-cli是一款基于vue的项目脚手架工具,其集成了webpack环境和主要的依赖,对于我们的项目搭建.开发.打包.维护管理等都是非常的方便. 主要内 ...

  5. iOS UITableView动态隐藏或显示Item

    通过改变要隐藏的item的高度实现隐藏和显示item 1.创建UITableView #import "ViewController.h" @interface ViewContr ...

  6. Advanced Installer 打包后,安装包在WIN10下重启后再次运行安装的解决办法

    原文:Advanced Installer 打包后,安装包在WIN10下重启后再次运行安装的解决办法 前几个月使用Advanced Installer 打包了一堆安装包,其中有使用默认主题的,也有根据 ...

  7. virtualbox 安装 extension pack 方法以及出现 "The installer failed with exit code 1: VBoxExtPackHelperApp.exe: error: Failed to rename the temporary directory to the final one"的解决办法

    virtualbox 的版本:5.1.26    下载地址:https://www.virtualbox.org/wiki/Downloads extension pack 的版本:5.1.26   ...

  8. 修改Maven的本地仓库地址

    已经配置好的设定文件: 1.创建一个本地仓库的地址 2.修改Maven中conf目录下的settings.xml文件 在此处添加修改后的本地仓库的地址   3.打开cmd 输入mvn help:sys ...

  9. 一步到位安装Centos7、配置VMware、连接Xshell

    1.创建虚拟机 1.0 创建新的虚拟机 1.0.1 选择自定义配置 打开VMware,点击创建新的虚拟机. 如下图所示:   1.0.2 选择虚拟机硬件兼容性 如下图所示:   1.0.3 安装客户操 ...

  10. spring 5.x 系列第14篇 —— 整合RabbitMQ (代码配置方式)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.说明 1.1 项目结构说明 本用例关于rabbitmq的整合提供简单消 ...