代码之家  ›  专栏  ›  技术社区  ›  Mottie

隐藏的分区高度(更改我的建议)

  •  8
  • Mottie  · 技术社区  · 16 年前

    好吧,我要回答一个人的问题,为什么他们的剧本不起作用。他们将内容加载到一个隐藏的分区中,然后获取高度,这样他们就可以对包装分区进行动画制作。但是我总是尝试测试我提供的代码。所以我做了 this demo 向他们证明。

    那么,嗯,我是进入了暮光区还是现在在做梦? 掐自己 哎哟!

    我在firefox、ie和chrome中尝试了这个演示,两个方法都返回相同的值。萤火虫说零!我重新启动了我的电脑,我甚至改变了一点代码(删除了高度功能),并尝试与jquery 1.3.2,它仍然有效!我知道隐藏的元素 使用 返回零值。即使这样 SO Answer 是在给我建议!

    所以我想我的问题是…我错过了什么,还是我们给出了坏建议?

    4 回复  |  直到 10 年前
        1
  •  11
  •   Community Mohan Dere    9 年前

    查看jquery 1.4.2和1.3.2源代码,它实际上在调用 width() height() 在隐藏元素上。它设置以下属性:

    { position: "absolute", visibility: "hidden", display:"block" }
    

    然后它获取宽度/高度,并恢复属性的旧值。

    所以不需要自己更改属性——jquery将为您处理它。

    <编辑与编辑;
    这将允许您获取隐藏元素的维度。但是,当元素包含在另一个隐藏元素中时,它将不起作用-您将获得0的高度。在这种情况下,你需要另一个解决方案,可能像 this answer .
    <编辑/GT;


    以下是1.4.2中源代码的相关位:

    cssShow = { position: "absolute", visibility: "hidden", display:"block" },
    
    //[undocumented jQuery.css function which is called by .height() and .width()]
    css: function( elem, name, force, extra ) {
        if ( name === "width" || name === "height" ) {
            var val, props = cssShow, ....
    
            function getWH() {
                ... this function gets the actual width/height into the variable val
            }
    
            if ( elem.offsetWidth !== 0 ) {
                getWH();
            } else {
                jQuery.swap( elem, props, getWH );
            }
    
            return Math.max(0, Math.round(val));
        }
        return jQuery.curCSS( elem, name, force );
    },
    
    // A method for quickly swapping in/out CSS properties to get correct calculations
    swap: function( elem, options, callback ) {
        var old = {};
    
        // Remember the old values, and insert the new ones
        for ( var name in options ) {
            old[ name ] = elem.style[ name ];
            elem.style[ name ] = options[ name ];
        }
    
        callback.call( elem );
    
        // Revert the old values
        for ( var name in options ) {
            elem.style[ name ] = old[ name ];
        }
    }
    
        2
  •  1
  •   ben    15 年前

    我在获取隐藏元素宽度时遇到了同样的问题,所以我编写了这个插件调用 jQuery Actual 修理它。而不是使用

    $('#some-element').height();
    

    使用

    $('#some-element').actual('height');
    

    将为隐藏元素或具有隐藏父元素的元素提供正确的值。

    您也可以使用

    // get hidden element actaul width
    $( '.hidden' ).actual( 'width' );
    
    // get hidden element actaul innerWidth
    $( '.hidden' ).actual( 'innerWidth' );
    
    // get hidden element actaul outerWidth
    $( '.hidden' ).actual( 'outerWidth' );
    
    // get hidden element actaul height
    $( '.hidden' ).actual( 'height' );
    
    // get hidden element actaul innerHeight
    $( '.hidden' ).actual( 'innerHeight' );
    
    // get hidden element actaul outerHeight
    $( '.hidden' ).actual( 'outerHeight' );
    

    完整文档请参见 here . 页面中还包含一个演示。

    希望能帮上忙:)

        3
  •  0
  •   QuarK    13 年前

    您也可以使用javascript的 scrollHeight 属性。

    $("#id_element").attr('scrollHeight')
    
        4
  •  0
  •   Luca C.    10 年前
    $('.hidden-element').get(0).height;
    

    给出从DOM元素开始的高度,该高度也是为隐藏元素设置的。