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);
 }

嗨,在上面的函数中,我正在制作一个其中包含 html 元素的变量,我想知道tmp 变量的height和(因为内容会动态更新)我的问题是我可以通过使用方法和我来获取变量 tmp通过使用方法得到0。请帮我找到 var 的高度。如果我通过使用样式明确给出高度,那么 height() 方法给出了正确的答案,如果我附加了这个变量,arg 是'li'。widthwidthwidth()heightheight()tmp

4

2 回答 2

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);
}

示例小提琴

于 2013-10-14T10:59:40.173 回答
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 不同。这是一个 hack,我不推荐它,除非您开始在墙上留下前额痕迹。

于 2013-10-14T11:01:14.367 回答