zoukankan      html  css  js  c++  java
  • 父级display:none获取子元素宽的问题

    父元素display:none时,如果子元素的长宽为具体值,可以获取到,如果为百分比,获取不到。父元素display不为none时,如果子元素长宽为具体值,可以获取,为百分比时,获取的是body的长宽

    那就需要解决办法了,这个时候有个jquery的插件大家可以用jquery.actual.js,他可以让你获取隐藏元素的长宽

    ;( 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
                };
    
                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: block !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 (){
                            var $this = $( this );
    
                            // Save original style. If no style was set, attr() returns undefined
                            tmp.push( $this.attr( 'style' ));
                            $this.attr( '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;
            }
        });
    })( jQuery );
    

      

    用法:

    $("#id").actual('height')
    $("#id").actual('width')
    

      

  • 相关阅读:
    Unity 状态机切换
    Unity3d 血条脚本
    最简单的Python群聊
    EFCore 多字段排序分页法
    搭建react+redux+vscode+typescript开发环境
    C# 4格A*自动寻径
    Sql删除表中多余的重复记录
    ABP弹出提醒用户的错误信息
    百度地图 驾车路线编辑粗浅实例
    .NetCore3.1 WebApi中Swagger配置
  • 原文地址:https://www.cnblogs.com/ZLHF/p/10912429.html
Copyright © 2011-2022 走看看