2013-10-14 3 views
0
function appData (arg) { 
    var tmp ='<div class="eventPopUp" z-index:6;">asdfasd <br> asdfasd <br> asdfasd <br> asdfasd<div style="clear:"></div></div>' 
    $(arg).html(tmp); 
    var off= $(tmp).offset().left; 
    var wid = $(tmp).width(); 
    //var hei = $(arg).children().height(); 
    var hei = $(tmp).outerHeight(); 


    console.log('width is ' + wid + ' height is ' + hei); 
} 

Hi в приведенной выше функции я делаю переменную, которая имеет HTML элементы в нем, и я хочу знать height и width переменной TMP (еще потому содержимое обновляется динамически). Моя проблема в том, что я могу получить width переменной tmp с помощью метода width(), и я получаю height 0 с помощью метода height(). пожалуйста, помогите мне найти высоту var tmp. и если я явно даю высоту, используя стиль, то метод height() дает правильный ответ, а arg - это «li», если бы я добавлял эту переменную.Как найти высоту вар, который имеет содержание HTML в нем

+0

Я не уверен, есть ли какой-либо метод/подход, который может найти высоту/ширину элемента, который еще не был создан. – Rex

+0

Что такое arg, из которого HTML обновляется? –

+0

Вы используете свой tmp как ваш селектор. Итак, jQuery ищет селектор ''

asdfasd
asdfasd
asdfasd
asdfasd
'' Если я вас понимаю, вам нужно изменить 'tmp' на' this.div', считая, что это созданный вами div, который вы пытаетесь получить размеры. – Cosades

ответ

2

jQuery кажется смущенным относительно того, какой элемент вы выбираете при выполнении $(tmp) и, следовательно, возвращает пустую высоту.

Если вы определяете строку как объект в явном виде при инициализации, высота может быть рассчитана после ее присоединения к DOM. Попробуйте это:

function appData(arg) { 
    var $tmp = $('<div class="eventPopUp">asdfasd <br> asdfasd <br> asdfasd <br> asdfasd<div style="clear:"></div></div>') 
    $(arg).append($tmp); 

    var off = $tmp.offset().left; 
    var wid = $tmp.width(); 
    var hei = $tmp.outerHeight(); 

    console.log('width is ' + wid + ' height is ' + hei); 
} 

Example fiddle

0

Причина, почему вы получаете 0, скорее всего потому, что вы читаете высоту, прежде чем элемент имеет какое-либо содержание в нем. Другими словами, попробуйте использовать document ready

$(document).ready(function() { 
// call appData function here 
}); 

Если это не работает, попробуйте использовать SetTimeout

x = setTimeout(function() { 
// call appData or read height and if height of my selection is != 0 then 
// { 
// clearTimeout(x); 
// myHeight = height of my selection 
// call function that does something with it and send it as a param 
// } 
}, 1000); 

Вы проверяете на высоте каждую секунду, пока высота не отличается от 0. Это хак , Я не рекомендую его, если только вы не начнете оставлять метки на лбу на стене.

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