2013-06-30 35 views
0

我试图使用jQuery获取宽度&元素的高度。现在我有一个函数可以在元素周围展开一个跨度,并从临时span元素中获取大小。尝试使用jQuery获取元素的实际宽度和高度

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/。但那不是我想要的:)

有人吗?

回答

0

EDITED ANSWER

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; 
} 
+0

因为我想元素内的HTML的宽度/高度。使用您的解决方案,我可以获得元素本身的大小,而不是其中的内容:http://jsfiddle.net/qJ6BZ/ – Pieter

+0

查看已更新的答案,但当然这将返回与容器相同的尺寸作为DIV将宽度和高度调整为其大小内容除了某些CSS规则应用为填充/边框/等等...如果仍然不能按照您的预期工作,请考虑在此情况下指出您期望的内容的大小 –

+0

是的!谢谢烤,它工作得很好! – Pieter

0

当你复制一个隐藏的元素它的大小是零。只是取消隐藏它的计算:

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

感谢Martin的回复,但它仍然无法正常工作:http://jsfiddle.net/psqM9/或者我在这里做错了什么? – Pieter

+0

我刚刚在计算之前添加了.show(),并在* .hide()之后,看看http://jsfiddle.net/psqM9/1/ –

相关问题