如何获取设置display:none元素及子元素的宽高

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

代码

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

html

<section class="section none">
  <div>
    <ul id="ul">
      <li>第 <span class="span">111</span>个</li>
      <li>第 <span class="span">222</span>个</li>
      <li>第 <span class="span">333</span>个</li>
    </ul>
  </div>
</section>

js

  • 判断元素是否隐藏
function isNone(el) {
  // 判断是否是元素节点
  if (el.nodeType != 1) return
  const {
    display
  } = window.getComputedStyle(el)
  return display === 'none'
}
  • 设置样式
function setStyle(obj = {}, el) {
  for (let item in obj) {
    el.style[item] = obj[item]
  }
}
  • 获取元素的宽高
function getNoneStyle (el) {
  // 获取隐藏元素
  let node = el
  while (node !== null && !isNone(node)) {
    node = node.parentNode
  }
  if (node === null) throw new Error('居然父元素都没有,这种情况,基本不会出现')

  setStyle({
    display: 'block',
    visibility: 'hidden',
    position: 'absolute'
  }, node)

  const {
    clientHeight,
    clientWidth
  } = el
  setStyle({
    display: '',
    visibility: '',
    position: ''
  }, node)

  return {
    width: clientWidth,
    height: clientHeight
  }

}

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

参考链接

原文地址:https://www.cnblogs.com/sinosaurus/p/11699824.html

时间: 2024-08-01 01:15:18

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

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

一.新建页面 1 <ul> 2 <li>list item 1</li> 3 <li>list item 2</li> 4 <li class="third-item">list item 3</li> 5 <li>list item 4</li> 6 <li>list item 5</li> 7 </ul> 8 9 <p>Hell

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

在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那么它们的高度都会是0,就算元素中有文字或者其它内容. 解决办法:通过jquery的show方法先展示出来,再在回调函数中获取它们的高度并操作即可,代码如下:$(".box").show(0,function(){ var h = $(".box").outerHeigh

jQuery中兄弟元素、子元素和父元素的获取

我们这里主要总结jQuery中对某元素的兄弟元素.子元素和父元素的获取,原声的Javascript代码对这些元素的获取比较麻烦一些,而jQuery正好对这些方法进行封装,让我们更加方便的对这些元素进行获取和操作. jQuery提供的方法 上来就把jQuery提供的方法摆在这里是不是有点不好呀,不过,我们从jQuery的方法名称上就能知道这些方法是干嘛的了. parent(selector) 查找父元素,可传入selector进行过滤(下同) parents(selector) 查找所有的祖先节点

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

一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 href_fir href_sec href_thr href_fiv $(document).ready(function(){ $("a").parent().addClass('a_par'); }); firebug查看jquery parent效果 二.获取同级元素: 1.next([expr]): 获取指定元素的下一个同级元素(注意是下一个同级元素哦) list item 1 list it

jquery选择器:获取父级元素、同级元素、子元素

jQuery的出现给广大开发者提供了不少的方便.从要自己一个一个敲代码,到直接调用方法,无疑大大地提高了网站开发的效率.而在jQuery中有一些方法非常的实用.下面就给大家介绍下jquery选择器:获取父级元素.同级元素.子元素的方法. 一.获取父级元素1.parent()获取指定元素的父级元素,注意:是最靠近指定元素的父级元素. 2.parents()获取指定元素的所有父级元素,注意:是所有的父级元素,包括body,html 二.获取同级元素1.next()获取指定元素的下一个同级元素(注意:

获取可见元素的子元素的值

html代码片段: <tr>     <td class="td1">图片分类</td>     <td class="td2">         <select class="c333 sel" name="type" id="type_p"><!--js通过此select选择下面的一个li显示,另一个隐藏-->           

jquery选择器 之 获取父级元素、同级元素、子元素(转)

一.获取父级元素 1. parent([expr]): 获取指定元素的所有父级元素 <div id="par_div"><a id="href_fir" href="#">href_fir</a><a id="href_sec" href="#">href_sec</a><a id="href_thr" href=&quo

bobo jquery获取当前元素下的子元素的子元素

<div class="Bg01"><ul><li class="Bold">黑域名告警</li><li>总数:<span class="Mycolor">24条</span></li><li>未处理:<span class="Myred">03条</span></li></ul

jQuery获取所有父级元素及同级元素及子元素的方法

1.获取父级元素 $("#id").parent() 获取其父级元素 $("#id").parents() 获取其所有的祖先元素 $("#id").closest() 获取其最近的祖先元素,依次上溯 2.获取同级元素 $("#id").next(selector) 获得匹配元素紧邻的下一个同胞元素.如果提供选择器,则取回匹配该选择器的下一个同胞元素. $("#id").nextAll(selector) 获

css设置时父元素随子元素margin值移动

父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化. HTML,CSS: <div class="box1"> <div class="box2"> <div class="content"> <div class="margin">123</div> &l