2013-06-30 5 views
0

Я пытаюсь получить ширину & Высота элемента с jQuery. Теперь у меня есть функция, которая обертывает span вокруг элемента и получает размер от временного элемента 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; 
} 

An (не) рабочий пример: http://jsfiddle.net/KmeaC/1/

Единственный способ получить фактическую ширину & высоту "Привет мир", чтобы удалить теги div вокруг него: http://jsfiddle.net/ycxTr/. Но это не то, что я хочу :)

Кто-нибудь?

ответ

0

EDITED ОТВЕТ

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

Спасибо Мартину за ваш ответ, но он все еще не работает: http://jsfiddle.net/psqM9/ Или я делаю что-то неправильно здесь? – Pieter

+0

Я только что добавил .show() перед вычислением и * .hide() после этого посмотрю http://jsfiddle.net/psqM9/1/ –

 Смежные вопросы

  • Нет связанных вопросов^_^