博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JS无法获取display为none的隐藏元素的宽度和高度的解决方案
阅读量:6815 次
发布时间:2019-06-26

本文共 4664 字,大约阅读时间需要 15 分钟。

在实际开发中会遇到确实需要获取隐藏元素的宽高,这儿所说的隐藏元素是display为none的元素。

可使用jQuery Actual Plugin插件来完成,其源码如下:

;( function ( factory ) {    if ( typeof define === 'function' && define.amd ) {        // AMD. Register module depending on jQuery using requirejs define.        define( ['jquery'], factory );    } else {        // No AMD.        factory( jQuery );    }    }( function ( $ ){      $.fn.addBack = $.fn.addBack || $.fn.andSelf;          $.fn.extend({            actual : function ( method, options ){          // check if the jQuery method exist          if( !this[ method ]){            throw '$.actual => The jQuery method "' + method + '" you called does not exist';          }              var defaults = {            absolute      : false,            clone         : false,            includeMargin : false,            display       : 'block'          };              var configs = $.extend( defaults, options );              var $target = this.eq( 0 );          var fix, restore;              if( configs.clone === true ){            fix = function (){              var style = 'position: absolute !important; top: -1000 !important; ';                  // this is useful with css3pie              $target = $target.                clone().                attr( 'style', style ).                appendTo( 'body' );            };                restore = function (){              // remove DOM element after getting the width              $target.remove();            };          }else{            var tmp   = [];            var style = '';            var $hidden;                fix = function (){              // get all hidden parents              $hidden = $target.parents().addBack().filter( ':hidden' );              style   += 'visibility: hidden !important; display: ' + configs.display + ' !important; ';                  if( configs.absolute === true ) style += 'position: absolute !important; ';                  // save the origin style props              // set the hidden el css to be got the actual value later              $hidden.each( function (){                // Save original style. If no style was set, attr() returns undefined                var $this     = $( this );                var thisStyle = $this.attr( 'style' );                    tmp.push( thisStyle );                // Retain as much of the original style as possible, if there is one                $this.attr( 'style', thisStyle ? thisStyle + ';' + style : style );              });            };                restore = function (){              // restore origin style values              $hidden.each( function ( i ){                var $this = $( this );                var _tmp  = tmp[ i ];                    if( _tmp === undefined ){                  $this.removeAttr( 'style' );                }else{                  $this.attr( 'style', _tmp );                }              });            };          }              fix();          // get the actual value with user specific methed          // it can be 'width', 'height', 'outerWidth', 'innerWidth'... etc          // configs.includeMargin only works for 'outerWidth' and 'outerHeight'          var actual = /(outer)/.test( method ) ?            $target[ method ]( configs.includeMargin ) :            $target[ method ]();              restore();          // IMPORTANT, this plugin only return the value of the first element          return actual;        }      });    }));

使用实例:

//get hidden element actual width    $('.hidden').actual('width');        //get hidden element actual innerWidth    $('.hidden').actual('innerWidth');        //get hidden element actual outerWidth    $('.hidden').actual('outerWidth');        //get hidden element actual outerWidth and set the `includeMargin` argument    $('.hidden').actual('outerWidth',{includeMargin:true});        //get hidden element actual height    $('.hidden').actual('height');        //get hidden element actual innerHeight    $('.hidden').actual('innerHeight');        //get hidden element actual outerHeight    $('.hidden').actual('outerHeight');        // get hidden element actual outerHeight and set the `includeMargin` argument    $('.hidden').actual('outerHeight',{includeMargin:true});        //if the page jumps or blinks, pass a attribute '{ absolute : true }'    //be very careful, you might get a wrong result depends on how you makrup your html and css    $('.hidden').actual('height',{absolute:true});        // if you use css3pie with a float element    // for example a rounded corner navigation menu you can also try to pass a attribute '{ clone : true }'    // please see demo/css3pie in action    $('.hidden').actual('width',{clone:true});

插件地址:

转载地址:http://clzzl.baihongyu.com/

你可能感兴趣的文章
研究称Android内核存在漏洞 黑客可窃取电邮
查看>>
C#缺省参数可以让代码变得更加简洁明了与时俱进心里敞亮了很多了
查看>>
【自然框架】js版的QuickPager分页控件 V2.0
查看>>
poj-2049 Finding Nemo *
查看>>
模块化编程本质探讨
查看>>
利用博客与视频分享和交流知识和经验
查看>>
知道二叉树前序和中序序列打印后序序列
查看>>
js操作dom对象
查看>>
由于未能创建 Microsoft Visual C# 2008 编译器,因此未能打开项目
查看>>
Windows2003服务器安全配置:先关闭不需要的端口(转自)
查看>>
HDU1247 Hat’s Words 【trie树】
查看>>
iOS开发--动画篇之layout动画深入
查看>>
nullpointerxception——处理思路
查看>>
WorldWind源码剖析系列:视景体类Frustum
查看>>
(转)完整java开发中JDBC连接数据库代码和步骤
查看>>
Redis Lua脚本原理
查看>>
有时间测试dism
查看>>
/Users/alamps/AndroidStudioProjects/Demo10ScrollView
查看>>
【Swift】iOS UICollectionView 计算 Cell 大小的陷阱
查看>>
为什么我刚发表的文章变成了“待审核”,csdn有没有官方解释啊
查看>>