由于元素设置了display:none时,页面便不会对其渲染,导致无法获取其元素的宽高。目前一般的做法都是先对其设置display:block,拿到数据再设置其为display:none。如此便可以了

代码

如何获取 id="ul" 元素的宽高???

html

  1. <section class="section none">
  2. <div>
  3. <ul id="ul">
  4. <li><span class="span">111</span></li>
  5. <li><span class="span">222</span></li>
  6. <li><span class="span">333</span></li>
  7. </ul>
  8. </div>
  9. </section>

js

  • 判断元素是否隐藏
  1. function isNone(el) {
  2. // 判断是否是元素节点
  3. if (el.nodeType != 1) return
  4. const {
  5. display
  6. } = window.getComputedStyle(el)
  7. return display === 'none'
  8. }
  • 设置样式
  1. function setStyle(obj = {}, el) {
  2. for (let item in obj) {
  3. el.style[item] = obj[item]
  4. }
  5. }
  • 获取元素的宽高
  1. function getNoneStyle (el) {
  2. // 获取隐藏元素
  3. let node = el
  4. while (node !== null && !isNone(node)) {
  5. node = node.parentNode
  6. }
  7. if (node === null) throw new Error('居然父元素都没有,这种情况,基本不会出现')
  8. setStyle({
  9. display: 'block',
  10. visibility: 'hidden',
  11. position: 'absolute'
  12. }, node)
  13. const {
  14. clientHeight,
  15. clientWidth
  16. } = el
  17. setStyle({
  18. display: '',
  19. visibility: '',
  20. position: ''
  21. }, node)
  22. return {
  23. width: clientWidth,
  24. height: clientHeight
  25. }
  26. }

通过设置样式,基本都可以拿到元素的宽高,但是需要注意,理当先记录元素之前的样式,在获取数据后,再还回去,避免覆盖,导致样式发生变化

参考链接

如何获取设置display:none元素及子元素的宽高的更多相关文章

  1. 当display=none时,元素和子元素高度为0的解决办法

    在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那 ...

  2. jquery选择器如何获取父级元素、同级元素、子元素

    一.新建页面 <ul> <li>list item 1</li> <li>list item 2</li> <li class=&qu ...

  3. jquery获取元素(父级的兄弟元素的子元素)

    一.获取父级元素 使用jquery获取父级元素: parent() 例如:$(this).parent('ul'); 二.获取同级元素 使用jquery获取同级元素:siblings() 例如:$(t ...

  4. 给父元素与子元素分别设置visibility注意点

    由于机顶盒的终端特性原因,不能用display:hidden去做隐藏,就选择了visibility:hidden. 在这里遇到一个现象: 给父元素设置了hidden,但是里面的子元素依然可见.以为只是 ...

  5. css获取除第一个之外的子元素

    在前端页面开发中,需要使用css来选择除了第一个之外的子元素,例如希望每个span之间能间隔一定的距离,单不能给每个span设置margin-left,这样会导致第一个span的前面有间距,影响排版. ...

  6. display:flex;下的子元素width无效问题

    因为flex属性默认值为flex:0 1 auto;其中 1 为 flex中的 flex-shrink 属性. 该属性介绍: 一个数字,规定项目将相对于其他灵活的项目进行收缩的量. 根据上述介绍可以理 ...

  7. jquery选择器 之 获取父级元素、同级元素、子元素

    jquery选择器 之 获取父级元素.同级元素.子元素 一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div" ...

  8. jQuery学习笔记---兄弟元素、子元素和父元素的获取

    我们这里主要总结jQuery中对某元素的兄弟元素.子元素和父元素的获取,原声的Javascript代码对这些元素的获取比较麻烦一些,而jQuery正好对这些方法进行封装,让我们更加方便的对这些元素进行 ...

  9. js与jquery获取父元素,删除子元素的不同方法

    var obj=document.getElementById("id");得到的是dom对象,对该对象进行操作的时候使用js方法 var obj=$("#id" ...

  10. jquery选择器 之 获取父级元素、同级元素、子元素 - yes的日志 - 网易博客

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

随机推荐

  1. Python3学习笔记(十):赋值语句和布尔值

    一.赋值语句 1.序列解包 多个赋值同时进行: >>> x,y,z = 1, 2, 3 >>> print(x, y, z) 1 2 3 变量交换: >> ...

  2. F - Almost Sorted Array

    F - Almost Sorted Array   We are all familiar with sorting algorithms: quick sort, merge sort, heap ...

  3. centOS7安装docker遇到 [Errno 14] curl#35 - "TCP connection reset by peer问题解决

    ---------------------------------------------------------------------------------------------------- ...

  4. scala基础-1

    函数式编程 ​ 并行编程 ​ 多核计算.云计算 ​ 引用透明,给值确定,结果也确定 数据类型 三种变量修饰符 ​ val 定义immutable variable ​ var 定义mutable va ...

  5. Linux下不同组件运行命令

    Spark优化配置 添加外包路径 1.1 vim $SPARK_HOME/conf/spark-defaults.conf spark.executor.extraClassPath file:/// ...

  6. [JZO6401]:Time(贪心+树状数组)

    题目描述 小$A$现在有一个长度为$n$的序列$\{x_i\}$,但是小$A$认为这个序列不够优美. 小$A$认为一个序列是优美的,当且仅当存在$k\in [1,n]$,满足:$$x_1\leqsla ...

  7. 关于Tomcat配置相关总结

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  8. jquery 四舍五入小数处理总结

    一.jquery中对小数进行取整.四舍五入的方法 1.丢弃小数部分,保留整数部分 parseInt(5/2) =2 2.四舍五入. Math.round(5/2) =3 3.向下取整 Math.flo ...

  9. Windows UI Library - Roadmap Win UI3.0

    https://github.com/microsoft/microsoft-ui-xaml/blob/master/docs/roadmap.md 微软更新太快了.是不是要把开发人员折磨死.... ...

  10. [mysql]多个字段确定唯一性-联合唯一索引

    一.联合唯一索引项目中需要用到联合唯一索引: 例如:有以下需求:每个人每一天只有可能产生一条记录:处了程序约定之外,数据库本身也可以设定: 例如:t_aa 表中有aa,bb两个字段,如果不希望有2条一 ...