【问题标题】:Try to get actual width & height of a element with jQuery尝试使用 jQuery 获取元素的实际宽度和高度
【发布时间】:2013-06-30 15:10:06
【问题描述】:

我正在尝试使用 jQuery 获取元素的宽度和高度。现在我有一个函数可以在元素周围包裹一个 span 并从临时 span 元素中获取大小。

HTML

<a id="test">click</a><br />
<div id="content" style="display:block">
    <div>Hello world</div>
</div>

<h3>Result:</h3>
<div id="result"></div>

JS

$( '#test' ).click ( function () {

    var size = elementSize ( '#content' );
    $( '#result' ).html ( size.width + ' x ' + size.height + ' px' );
} );

function elementSize ( elementId ) {

    var html_org = $( elementId ).html ();
    var html_calc = '<span>' + html_org + '</span>';
    $( elementId ).html( html_calc );

    var ret = {
        width: $( elementId ).find( 'span:first' ).width (),
        height: $( elementId ).find( 'span:first' ).height (),
    };

    $( elementId ).html( html_org );

    return ret;
}

一个(非)工作示例:http://jsfiddle.net/KmeaC/1/

获得“Hello world”实际宽度和高度的唯一方法是删除它周围的 div 标签:http://jsfiddle.net/ycxTr/。但这不是我想要的:)

有人吗?

【问题讨论】:

    标签: javascript jquery actualwidth actualheight


    【解决方案1】:

    当您复制隐藏元素时,它的大小为零。只需取消隐藏即可进行计算:

    function elementSize ( elementId ) {
        ...
        $( elementId ).html( html_calc ).show();    
        var ret = {
            ...
        };    
        $( elementId ).html( html_calc ).hide();    
        ...    
        return ret;
    }
    

    【讨论】:

    • 感谢 Martin 的回复,但它仍然无法正常工作:jsfiddle.net/psqM9 或者我在这里做错了什么?
    • 我只是在计算之前加了.show(),之后加了*.hide(),看看jsfiddle.net/psqM9/1
    【解决方案2】:

    编辑答案

    DEMO

    $('#test').click(function () {
    
        var size = elementSize('#content');
        $('#result').html(size.width + ' x ' + size.height + 'px');
    });
    
    function elementSize(elementId) {
    
        var html_org = $(elementId).html();
        var $html_calc = $('<span>' + html_org + '</span>').css({
            position: 'absolute',
            top: -9999,
            left: -9999
        }).appendTo('body');
    
    
    
        var ret = {
            width: $html_calc.width(),
            height: $html_calc.height(),
        };
        $html_calc.remove();
    
        return ret;
    }
    

    【讨论】:

    • 因为我想要元素内 html 的宽度/高度。通过您的解决方案,我得到了元素本身的大小,而不是其中的内容:jsfiddle.net/qJ6BZ
    • 查看更新的答案,但当然这将返回与容器相同的大小,因为 DIV 将宽度和高度适应其内容,除非某些 CSS 规则被应用为填充/边框/等...如果仍然没有按照您的预期工作,请考虑告诉您在这种情况下您期望内容的大小
    猜你喜欢
    • 2012-01-16
    • 2011-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2012-12-17
    • 1970-01-01
    • 2012-08-08
    相关资源
    最近更新 更多